Vuex面试题汇总,2024年最新rxjava面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

export default{

computed:{

…mapGetters([‘total’,‘discountTotal’])

}

}

怎么在组件中批量给Vuex的getter属性取别名并使用

参考答案

使用mapGetters辅助函数, 利用对象展开运算符将getter混入computed 对象中

import {mapGetters} from ‘vuex’

export default{

computed:{

…mapGetters({

myTotal:‘total’,

myDiscountTotal:‘discountTotal’,

})

}

}

在Vuex的state中有个状态number表示货物数量,在组件怎么改变它。

参考答案

首先要在mutations中注册一个mutation

const store = new Vuex.Store({

state: {

number: 10,

},

mutations: {

SET_NUMBER(state,data){

state.number=data;

}

},

});

在组件中使用this.$store.commit提交mutation,改变number

this.$store.commit(‘SET_NUMBER’,10)

在Vuex中使用mutation要注意什么。

参考答案

mutation 必须是同步函数

在组件中多次提交同一个mutation,怎么写使用更方便。

参考答案

使用mapMutations辅助函数,在组件中这么使用

import { mapMutations } from ‘vuex’

methods:{

…mapMutations({

setNumber:‘SET_NUMBER’,

})

}

然后调用this.setNumber(10)相当调用this.$store.commit('SET_NUMBER',10)

Vuex中action和mutation有什么区别?

参考答案

  • action 提交的是 mutation,而不是直接变更状态。mutation可以直接变更状态。

  • action 可以包含任意异步操作。mutation只能是同步操作。

  • 提交方式不同,action 是用this.$store.dispatch('ACTION_NAME',data)来提交。mutation是用this.$store.commit('SET_NUMBER',10)来提交。

  • 接收参数不同,mutation第一个参数是state,而action第一个参数是context,其包含了

{

state, // 等同于 store.state,若在模块中则为局部状态

rootState, // 等同于 store.state,只存在于模块中

commit, // 等同于 store.commit

dispatch, // 等同于 store.dispatch

getters, // 等同于 store.getters

rootGetters // 等同于 store.getters,只存在于模块中

}

Vuex中action和mutation有什么相同点?

参考答案

第二参数都可以接收外部提交时传来的参数。 this.$store.dispatch('ACTION_NAME',data)this.$store.commit('SET_NUMBER',10)

在组件中多次提交同一个action,怎么写使用更方便。

参考答案

使用mapActions辅助函数,在组件中这么使用

methods:{

…mapActions({

setNumber:‘SET_NUMBER’,

})

}

然后调用this.setNumber(10)相当调用this.$store.dispatch('SET_NUMBER',10)

Vuex中action通常是异步的,那么如何知道action什么时候结束呢?

参考答案

在action函数中返回Promise,然后再提交时候用then处理

actions:{

SET_NUMBER_A({commit},data){

return new Promise((resolve,reject) =>{

setTimeout(() =>{

commit(‘SET_NUMBER’,10);

resolve();

},2000)

})

}

}

this.$store.dispatch(‘SET_NUMBER_A’).then(() => {

// …

})

Vuex中有两个action,分别是actionA和actionB,其内都是异步操作,在actionB要提交actionA,需在actionA处理结束再处理其它操作,怎么实现?

参考答案

利用ES6的asyncawait来实现。

actions:{

async actionA({commit}){

//…

},

async actionB({dispatch}){

await dispatch (‘actionA’)//等待actionA完成

// …

}

}

有用过Vuex模块吗,为什么要使用,怎么使用。

参考答案

有,因为使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。所以将 store 分割成模块(module)。每个模块拥有自己的 state、mutations、actions、getters,甚至是嵌套子模块,从上至下进行同样方式的分割。

在module文件新建moduleA.js和moduleB.js文件。在文件中写入

const state={

//…

}

const getters={

//…

}

const mutations={

//…

}

const actions={

//…

}

export default{

state,

getters,

mutations,

actions

}

然后再index.js引入模块

import Vue from ‘vue’;

import Vuex from ‘vuex’;

Vue.use(Vuex);

import moduleA from ‘./module/moduleA’

import moduleB from ‘./module/moduleB’

const store = new Vuex.Store({

modules:{

moduleA,

moduleB

}

})

export default store

在模块中,getter和mutation接收的第一个参数state,是全局的还是模块的?

参考答案

第一个参数state是模块的state,也就是局部的state。

在模块中,getter和mutation和action中怎么访问全局的state和getter?

参考答案

  • 在getter中可以通过第三个参数rootState访问到全局的state,可以通过第四个参数rootGetters访问到全局的getter。

  • 在mutation中不可以访问全局的satat和getter,只能访问到局部的state。

  • 在action中第一个参数context中的context.rootState访问到全局的state,context.rootGetters访问到全局的getter。

在组件中怎么访问Vuex模块中的getter和state,怎么提交mutation和action?

参考答案

  • 直接通过this.$store.gettersthis.$store.state来访问模块中的getter和state。

  • 直接通过this.$store.commit('mutationA',data)提交模块中的mutation。

  • 直接通过this.$store.dispatch('actionA,data')提交模块中的action。

用过Vuex模块的命名空间吗?为什么使用,怎么使用。

参考答案

默认情况下,模块内部的action、mutation和getter是注册在全局命名空间,如果多个模块中action、mutation的命名是一样的,那么提交mutation、action时,将会触发所有模块中命名相同的mutation、action。

这样有太多的耦合,如果要使你的模块具有更高的封装度和复用性,你可以通过添加namespaced: true 的方式使其成为带命名空间的模块。

export default{

namespaced: true,

state,

getters,

mutations,

actions

}

怎么在带命名空间的模块内提交全局的mutation和action?

参考答案

将 { root: true } 作为第三参数传给 dispatch 或 commit 即可。

this.$store.dispatch(‘actionA’, null, { root: true })

this.$store.commit(‘mutationA’, null, { root: true })

怎么在带命名空间的模块内注册全局的action?

actions: {

actionA: {

root: true,

handler (context, data) { … }

}

}

组件中怎么提交modules中的带命名空间的moduleA中的mutationA?

this.$store.commit(‘moduleA/mutationA’,data)

怎么使用mapState,mapGetters,mapActions和mapMutations这些函数来绑定带命名空间的模块?

参考答案

首先使用createNamespacedHelpers创建基于某个命名空间辅助函数

import { createNamespacedHelpers } from ‘vuex’;

const { mapState, mapActions } = createNamespacedHelpers(‘moduleA’);

export default {

computed: {

// 在 module/moduleA 中查找

…mapState({

a: state => state.a,

b: state => state.b

})

},

methods: {

// 在 module/moduleA 中查找

…mapActions([

‘actionA’,

‘actionB’

])

}

}

Vuex插件有用过吗?怎么用简单介绍一下?

参考答案

Vuex插件就是一个函数,它接收 store 作为唯一参数。在Vuex.Store构造器选项plugins引入。 在store/plugin.js文件中写入

export default function createPlugin(param){

return store =>{

//…

}

}

然后在store/index.js文件中写入

import createPlugin from ‘./plugin.js’

const myPlugin = createPlugin()

const store = new Vuex.Store({

// …

plugins: [myPlugin]

})

在Vuex插件中怎么监听组件中提交mutation和action?

参考答案

  • 用Vuex.Store的实例方法subscribe监听组件中提交mutation

  • 用Vuex.Store的实例方法subscribeAction监听组件中提交action 在store/plugin.js文件中写入

export default function createPlugin(param) {

return store => {

store.subscribe((mutation, state) => {

console.log(mutation.type)//是那个mutation

console.log(mutation.payload)

console.log(state)

})

// store.subscribeAction((action, state) => {

// console.log(action.type)//是那个action

// console.log(action.payload)//提交action的参数

// })

store.subscribeAction({

before: (action, state) => {//提交action之前

console.log(before action ${action.type})

},

after: (action, state) => {//提交action之后

console.log(after action ${action.type})

}

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

html5

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
on.type}`)

},

after: (action, state) => {//提交action之后

console.log(after action ${action.type})

}

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

html5

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-zg7GXwrz-1713044329401)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值