关于Vuex的使用以及自己的一些理解

        在一些相对大型的Vue项目中,少不了对Vuex的使用。什么是Vuex呢,通俗来说,Vuex就是一个仓库,这个仓库里存放的都是Vue所有组件间共用的状态和方法,是全局的。当业务逻辑复杂,需要组件间大量共享数据的时候,就轮到Vuex登场了,所以,掌握Vuex的使用是非常重要的。

        具体的实现我就不一一赘述了,网上一搜一大片,在这里我主要谈一下我对Vuex的理解。

        首先,Vuex有五个基本的对象:

  •         state
  •         getter
  •         modules
  •         mutations
  •         actions

        我会按照上面的顺序来一一为大家讲解。

state

        state非常好理解,里面存放了一些组件之间共享的状态,值得注意的是,state里面还可以存放方法,我们可以结合Promise和async、await阻塞当前的操作,并在合适的时机重新继续执行。用过Promise的朋友们都知道,Promise有两个参数:resolve和reject,当调用这两个参数的时候,Promise才会去返回结果,也就是说,你如果不去resolve或者reject的话,它会永远停在哪里。所以,如果我们在调用Promise的时候不去马上resolve或reject,而是把这两个参数存在state里,结合async和await,可以使操作一直停在那里,在合适的时机去调用state里存放的resolve和reject,使操作继续执行,这是一个非常巧妙的操作,常用来弹出提示框等待用户确认的场景。

getter

        getter是作为state的延伸,一定程度上可以理解为Vuex里的computed属性。我们在组件中使用state里的值时,有时候并不能直接使用,需要对其进行一些过滤或者加工,一般来说会在组件的computed属性里进行计算,但如果这个值在多个组件中使用,使用前都需要进行同样处理的话,我们每次使用都要在computed里写一样的处理,这就非常不合适。所以,这就用到了getter方法,在这里可以获取其他getter方法和state里的值进行处理后,暴露出去,他也是响应式的,会随着里面参数的改变而发生变化。

modules

        相信很多使用过Vuex的人都没有接触过这个,实际上,Vuex也可以分为多个模块,当项目中需要存放的状态和方法非常多时,把它们都放在一个模块中就会显得非常臃肿,难以维护,体验非常差。这时,我们就可以通过modules方法进行模块划分,就类似于仓库的小隔间一样,把不同模块的state、getter、mutations、actions放在一个文件或文件夹里,极大的增加了可读性和可维护性,而且在软件开发中,一般来说各个模块对应不同的负责人,所以在使用modules进行分类后,对于开发人员是非常友好的。

mutations

        使用mutations的目的就只有一个,那就是改变当前模块state里的状态,state里的状态只有通过mutations才可以改变,当然,你也可以在里面对参数进行加工后在放入state里。网上好多说mutations是同步的,在这里我纠正一下,mutations本身不是同步的,是里面存放的方法是同步的。当然,Vuex无法去强制你在mutations里面不能写异步方法,你在里面写异步方法完全没有问题,同样可以改变state里的状态,但是,这样mutations就失去了他的意义,将mutations和actions分开的意义就在于,我们通过mutations可以掌握state里状态改变的时机,当我们调用mutations的方法时,确定这时候state里的状态已经被修改了,然后可以执行我们的下一步操作,当然,这都是建立在mutations里的方法都是同步的基础上。在一定程度上,我们可以把它理解为一种规范而不是规则,不遵守规范会对日后项目的开发和维护带来非常多的麻烦。

actions

        在actions里可以存放任何方法,通过调用mutations的方法修改state里的状态。actions比较特别的一点是,他可以使用其他modules下state、mutations和actions的状态或方法。所以,如果我们想要跨不同的modules进行交互的时候,只能通过actions进行操作。      


        以上就是我对Vuex的一些理解,具体实现网上一搜一大片,关键还是要多去coding,写多了自然对其理解会越来越深。这周面试了不少工作经验两三年的前端开发,好多对Vuex一无所知,使用过的也大都一知半解,都在那背面试题。Vuex并不难,作为一个前端程序员,我们需要不断的学习充实自己,对自己未知的领域充满好奇,才能在接下来的工作中把握住机会,不被飞速发展的技术所淘汰。

上一篇:vuex 理解


下一篇:Vuex的简单认识