轻松的理解,轻松阅读理解

  轻松的理解,轻松阅读理解

  本文主要介绍Vuex及其用法。有兴趣的同学可以参考一下。

  

目录

   Vuex的四大对象概述:状态的用法、突变的用法、getters的用法、actions的用法、Vuex的适用场景

  

概述

  Vuex是专门为Vue.js应用(https://vuex.vuejs.org/zh/,官网)开发的状态管理模式。它采用集中存储来管理应用程序所有组件的状态,并确保状态以可预测的方式随相应的规则变化。

  用我们的大白话来说:Vuex是一种状态管理模式,可以简单理解为全局对象。然后我们可以修改这个全局对象中的属性或者添加方法,但是不能像传统JS的直接赋值形式那样修改。我们得根据Vuex提供的规则修改它;

  vue的存在是用来解决组件之间的值传递问题的。说白了就是看我们传统VUE亲子成分价值传递的麻烦和弊端,给我们带来的好处。这个官网说的很清楚:

  提示:本文将以模块导入导出的形式使用vuex。这篇文章有点长,希望耐心看完。当然,如果条件允许的话,跟着做就更好了!

  

Vuex四大对象

  它们是状态、突变、获取器和动作;

  状态:Vuex中的数据源。我们需要的公共数据都存储在这里,可以简单理解为透明仓库。你可以通过这个访问这个仓库中的数据源。$store.state变量名;

  突变:突变相当于这个仓库的钥匙。只能通过提交突变来修改数据源,也就是说,如果要改变这个仓库的数据,只能通过突变来修改(这个。$store.commit(方法名);

  Getters:getters类似于vue中的computed属性。getters的返回值将根据它在state中所依赖的值的状态修改而改变。如果getters中它所依赖的状态中的值没有改变,就直接从缓存中读取。如果发生变化,这里也会发生变化,可以用来监控State的值的变化。这里的Getters可以理解为国家仓库的保安。如果状态的数据发生变化,保安会采取相应的措施做出相应的改变。如果没有改变,如果什么都没有,他就继续吃,继续死(哈哈哈,我不知道是不是只是比喻不恰当,就是这个意思。大家理解就好。不要是一个混蛋)

  动作:动作和突变非常相似,只是突变官方规定只能进行同步操作,而动作中可以进行异步操作;也就是说,我们需要在actions中进行异步操作,然后actions提交突变,而不是直接修改状态。也就是说,如果你进入这个仓库修改数据,你必须在你能修改它之前得到密钥,所以动作被提交给突变然后被执行:

  

state的用法

  首先我们会新建一个项目来搭建vue的环境,这里就不赘述了。毕竟这篇文章讲的是vuex首先在项目中安装vuex:

  安装vuex的命令:npm安装vuex - save

  安装vuex后,我们将在src目录下创建一个新的vuex文件夹,并在vuex文件夹下创建一个新的store.js文件:

  store.js:

  从“Vue”导入Vue;

  从“Vuex”导入Vuex;

  vue . use(Vuex);

  常量状态={

  数量:1

  }

  导出默认的新Vuex。商店({

  状态,

  })

  然后我们引用main.js中的store.js,在实例化对象时添加store对象。

  主页. js

  从“vue”导入Vue

  从导入应用程序。/App

  从导入路由器。/路由器

  //引用store.js

  从导入存储。/vuex/store

  Vue.config.productionTip=false

  /* eslint-禁用no-new */

  新Vue({

  埃尔: #app ,

  路由器,

  //实例化时添加store对象

  店,

  组件:{ App },

  模板:“应用程序/”

  })

  然后修改我们的App.vue文件。

  App.vue

  模板

  div id=应用程序

  img src=。/assets/logo.png

  //视图层添加数据便于观察。

  p { {这个。$store.state.number}}/p

  /div

  /模板

  脚本

  导出默认值{

  名称:“应用程序”

  }

  /脚本

  风格

  #app {

  字体系列:“Avenir”,Helvetica,Arial,无衬线;

  -webkit-font-smoothing:抗锯齿;

  -moz-osx-font-smoothing:灰度;

  文本对齐:居中;

  颜色:# 2c3e50

  边距-顶部:60px

  }

  /风格

  通过上面的代码我们可以看到,我们在App中添加了一个P标签,vue vuex规定,如果我们需要读取vuex中的数据,也就是state的数据源仓库,就必须通过这个来访问。$store.state变量名。

  

mutations的用法

  如果我们需要修改vuex中的数据源,我们可以通过提交突变来实现;

  首先,我们需要在视图层中添加一个按钮来控制:

  App.js

  模板

  div id=应用程序

  img src=。/assets/logo.png

  p{{$store.state.number}}/p

  //添加一个按钮来触发修改数据源的事件

  按钮@click=添加按钮/按钮

  /div

  /模板

  脚本

  导出默认值{

  名称:“应用程序”,

  方法:{

  add(){

  //要修改数据源,需要使用vuex指定的方法。

  这个。$ store . commit( addFunction );

  }

  }

  }

  /脚本

  风格

  #app {

  字体系列:“Avenir”,Helvetica,Arial,无衬线;

  -webkit-font-smoothing:抗锯齿;

  -moz-osx-font-smoothing:灰度;

  文本对齐:居中;

  颜色:# 2c3e50

  边距-顶部:60px

  }

  /风格

  然后修改我们的store.js:

  从“Vue”导入Vue;

  从“Vuex”导入Vuex;

  vue . use(Vuex);

  常量状态={

  数量:1

  }

  //添加突变对象,状态参数可以得到上述状态。

  常量突变={

  addFunction(state){

  返回state . number=1;

  }

  }

  //一定要添加到这里的实例中,否则会报错。

  导出默认的新Vuex。商店({

  状态,

  突变

  })

  我们可以直观的看到,我们可以通过这个提交突变来修改数据源。$store.commit(方法名),当然我们的突变也可以接收参数。第一个参数是突变的方法名,第二个参数是突变需要接收的参数,让我们的突变变得更加灵活;

  

getters的用法

  Getters类似于vue的计算机用法,它可以监控状态数据源仓库的数据变化。如果getter所依赖的数据状态发生变化,那么getter所依赖的数据也会发生变化,状态也会发生变化。

  首先,我们可以在store.js中添加以下代码:

  从“Vue”导入Vue;

  从“Vuex”导入Vuex;

  vue . use(Vuex);

  常量状态={

  数量:1

  }

  const getters={

  //方法触发的state就是上面的state对象,可以读取state的值。

  addFunction(state){

  返回state.number

  }

  }

  导出默认的新Vuex。商店({

  状态,

  //在这里实例化的时候一定要记得添加对象。

  吸气剂

  })

  我们可以像这样更改App.vue中的视图:

  模板

  div id=应用程序

  img src=。/assets/logo.png

  页面的值:{{$store.state.number}}/p

  //添加一个标签以与页面的值进行比较

  p我的getters的值:{ { $ store . getters . add function } }/p

  /div

  /模板

  脚本

  导出默认值{

  名称:“应用程序”,

  }

  /脚本

  风格

  #app {

  字体系列:“Avenir”,Helvetica,Arial,无衬线;

  -webkit-font-smoothing:抗锯齿;

  -moz-osx-font-smoothing:灰度;

  文本对齐:居中;

  颜色:# 2c3e50

  边距-顶部:60px

  }

  /风格

  通过上面的代码和视图层,我们可以清楚的看到,当我们操作getters时,getters的addFunction方法被触发,addFunction方法会改变state.number的值,此时number的值已经是2了,所以页面上会显示2的值。因为在后面,此时getters的值为1。也就是说,当getters依赖的state.number的值在getters中发生变化时,state.number也会发生变化。如果state.number没有改变,getters将首先读取缓存。

  

actions的用法

  Actions对象主要执行异步操作,类似于突变,只不过actions是通过提交突变来改变数据,而不是直接改变数据状态;

  首先,我们可以更改store.js中的代码:

  从“Vue”导入Vue;

  从“Vuex”导入Vuex;

  vue . use(Vuex);

  常量状态={

  数量:1

  }

  常量突变={

  addFunction(state){

  返回state.number

  }

  }

  const getters={

  addFunction(state){

  返回state.number

  }

  }

  //context是与store实例具有相同属性和方法的对象。

  常量操作={

  addFunction(上下文){

  context . commit(“add function”);

  }

  }

  导出默认的新Vuex。商店({

  状态,

  突变,

  吸气剂,

  //实例化时记得在这里添加

  行动

  })

  App.vue中的代码修改为:

  模板

  div id=应用程序

  img src=。/assets/logo.png

  页面的值:{{$store.state.number}}/p

  按钮@click=添加按钮/按钮

  /div

  /模板

  脚本

  导出默认值{

  名称:“应用程序”,

  方法:{

  add(){

  //通过这个提交变异进行修改。//actions中的store.dispatch

  这个。$store.dispatch(addFunction )

  }

  }

  }

  /脚本

  风格

  #app {

  字体系列:“Avenir”,Helvetica,Arial,无衬线;

  -webkit-font-smoothing:抗锯齿;

  -moz-osx-font-smoothing:灰度;

  文本对齐:居中;

  颜色:# 2c3e50

  边距-顶部:60px

  }

  /风格

  

Vuex的适用场景

  在项目开发中,可能会有很多数据或参数需要我们多次读取或修改,比如购物车等类似的功能。这时候我们的可以通过vuex来实现;毕竟vuex只是一种状态管理模式。状态管理模式对我们来说是方便的,但也不是必须的,因为状态管理能做的,也可以通过其他方式方法实现。其实个人觉得,vuex和localStorange的相似之处在于用来存储和修改数据,为了解决跨页数据丢失的问题;

  也就是上面这篇文章让大家很容易理解Vuex的细节。更多关于Vuex的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: