前端面试宝典

vuex 状态管理篇

vuex是什么?怎么使用?在那种场景下使用。

Vuex是一个专为vue.js应用程序开发的状态管理模式,通过创建一个集中的数据存储,方便程序中的所有组件进行访问,简单来说,vuex是vue的状态管理工具。

vuex有五个属性 stategettersmutationsactionsmodules

state就是数据源存放地,对应一般的vue对象的datastate里面存放的数据是响应式的,state数据发生改变,对应这个数据的组件也会发生改变,用this.$store.state.xxx调用。

getters 相当于store的计算属性,主要是对state中数据的过滤,用this.$store.getters.xxx调用。

mutations处理数据逻辑的方法全部放在mutations中,当触发事件想改变state数据的时候使用mutations,用this.$store.commit调用。给这个方法添加一个参数,就是mutation的载荷(payload)

actions 异步操作数据,但是是通过mutation来操作,用this.$store.dispatch来触发,actions也支持载荷

使用场景:组件之间的状态,登录状态,加入购物车,音乐播放

Vuex引入流程:下载vuex
在src下创建 store 以及 index.js
引入 vue 和 vuex, 使用 vuex ,导出实例对象
在 main.js 中引入,在.vue 文件中使用

vuex 使用流程:
在 vue 组件里面,通过 dispatch 来触发 actions 提交修改数据的操作,
然后通过 actions 的 commit 触发 mutations 来修改数据,mutations
接收到 commit 的请求,就会自动通过 mutate 来修改 state,最后由
store 触发每一个调用它的组件的更新

vuex怎么请求异步数据

  1. 首先在 state 中创建变量
  2. 然后在 action 中调用封装好的 axios请求,异步接受数据,commit提交给mutations来改变state的状态,将从action中获取的值赋值给state

vuex中 action 如何提交给 mutation

action函数接收一个与store实例具有相同方法和属性的context对象
可以调用context.commit 提交一个mutation或者通过context.state和context.getters获取state和getters

vuex的state特性是?

state就是数据源的存放地,state里面的数据是响应式的,state中的数据改变,对应这个数据的组件也会发生改变。
state通过mapstate把全局的state和getters映射到当前组件的计算属性中

vuex的 Getter 特性是?

Getter可以对state进行计算操作,它就是store的计算属性。

Getter可以在多个组件之间复用,如果一个状态只在一个组件内使用,可以不用getters

vuex的 Mutation 特性是?

更改vuex store中修改状态的唯一办法就是提交mutation,可以在回调函数中修改store中的状态

vuex的actions特性是?

Action类似于mutation,不同的是action提交的是mutation,不是直接变更状态,可以包含任意异步操作。

vuex的优势

优点: 解决了非父子组件的通信,减少了ajax请求次数,有些可以直接从state中获取

缺点:刷新浏览器,vuex中的state会重新变为初始状态,解决办法是使用vuex插件vuex-persistedstate(数据持久化)