Vue2.0技术栈:Vuex面试题之少数派报告

方式二:使用npm来安装,并在组件中使用import导入

npm install vuex --save

import Vue from 'vue';

import Vuex from 'vuex';

// 通过模块倒入的话,还需要在模块中显式的安装

Vue.use(Vuex);

02 vuex的组成结构示意图

官方文档里面开篇就给出了一张介绍vuex的示意图。通过这个图,我们很容易就对vuex的组成部分,以及vuex与组件(components)之间的联系一目了然。

03 Vuex的原理和使用方法

数据单向流动

一个应用可以看作是由上面三部分组成: View, Actions,State,数据的流动也是从View => Actions => State =>View 以此达到数据的单向流动。但是项目较大的,组件嵌套过多的时候,多组件共享同一个State会在数据传递时出现很多问题。Vuex就是为了解决这些问题而产生的。

Vuex可以被看作项目中所有组件的数据中心,我们将所有组件中共享的State抽离出来,任何组件都可以访问和操作我们的数据中心。

Vuex原理

可以很好的说明Vuex的组成,一个实例化的Vuex.Store由state,mutations和actions三个属性组成:

state中保存着共有数据

改变state中的数据有且只有通过mutations中的方法,且mutations中的方法必须是同步的

如果要写异步的方法,需要些在actions中,并通过commit到mutations中进行state中数据的更改。

少数派面试题

1、vuex是什么?怎么使用?哪种功能场景使用它?

Vuex是vue框架中的状态管理插件。

在main.js引入store,注入。新建了一个目录store,….. export 。

场景有:单页应用中,组件之间的状态。音乐播放、登录状态、加入购物车

2、你对vuex的理解?

vuex可以理解为一种开发模式或框架。比如PHP有thinkphp,java有spring等。

通过状态(数据源)集中管理驱动组件的变化(好比spring的IOC容器对bean进行集中管理)。

应用级的状态集中放在store中; 改变状态的方式是提交mutations,这是个同步的事物; 异步逻辑应该封装在action中。

3、vuex有哪几种属性?

有五种,分别是 State、 Getter、Mutation 、Action、 Module

4、vuex的State特性是?

一、Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般Vue对象里面的data

二、state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新

三、它通过mapState把全局的 state 和 getters 映射到当前组件的 computed 计算属性中

5、vuex的Getter特性是?

一、getters 可以对State进行计算操作,它就是Store的计算属性

二、 虽然在组件内也可以做计算属性,但是getters 可以在多组件之间复用

三、 如果一个状态只在一个组件内使用,是可以不用getters

6、vuex的Mutation特性是?

一、Action 类似于 mutation,不同在于:

二、Action 提交的是 mutation,而不是直接变更状态。

三、Action 可以包含任意异步操作

7、Vue.js中ajax请求代码应该写在组件的methods中还是vuex的actions中?

一、如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。

二、如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用,并包装成promise返回,在调用处用async await处理返回的数据。如果不要复用这个请求,那么直接写在vue文件里很方便。

8、不用Vuex会带来什么问题?

一、可维护性会下降,你要想修改数据,你得维护三个地方

二、可读性会下降,因为一个组件里的数据,你根本就看不出来是从哪来的

三、增加耦合,大量的上传派发,会让耦合性大大的增加,本来Vue用Component就是为了减少耦合,现在这么用,和组件化的初衷相背。