vuex的使用步骤


Posted in Vue.js onJanuary 06, 2021

一、使用Vuex的目的

实现多组件状态管理。多个组件之间需要数据共享时,Vuex是个很好的帮手哦

二、Vuex 的五大核心

其中state和mutation是必须的,其他可根据需求来加

1.state

负责状态管理,类似于vue中的data,用于初始化数据

2.mutation

专用于修改state中的数据,通过commit触发

3.action

可以处理异步,通过dispatch触发,不能直接修改state,首先在组件中通过dispatch触发action,然后在action函数内部commit触发mutation,通过mutation修改state状态值

4.getter

Vuex中的计算属性,相当于vue中的computed,依赖于state状态值,状态值一旦改变,getter会重新计算,也就是说,当一个数据依赖于另一个数据发生变化时,就要使用getter

5.module

模块化管理

三、Vuex 怎么用

1.首先当然要安装啦 (假设你已经安装了vue)

npm install vuex

2.引入并使用Vuex

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

3.实例化一个Vuex对象--Store状态机 并抛出

const store = new Vuex.Store({})

export defaul store

4.在main.js中引入并注入Vuex

import Vue from 'vue'
import App from './App.vue'
import store from './store'
new Vue({
 render: h => h(App),
 store
}).$mount('#app')

5.通过this.$store访问Vuex的数据

到此,Vuex已准备完成,接下来就根据自己需要加入数据吧~

四、示例代码

1.首先准备至少两个组件,不然怎么数据共享呢

<template>
 <div>
 我是组件1
 </div>
</template>

<script> export default {
 
} </script>
<style scoped>
</style>
<template>
 <div>
 我是组件2
 </div>
</template>

<script> export default {
 
} </script>
<style scoped>
</style>

2.在store.js中写Vuex相关代码

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
 state: {},  //状态管理
 mutations: {}, //修改state
 actions: {}, //异步操作
 getters:{},  //计算属性
 modules: {}  //模块
})
export default store

注:别忘了在main.js里注入store呀(参考上面第三大点的第4小点)

3.假设咱们现在需要共享一个数据data,初始值为0

···
const store = new Vuex.Store({
 state: {
  data:0
 }  
})
···

4.组件1和组件2都可以通过$store拿到data

<div>
 我是组件1
 {{this.$store.state.data}} //浏览器中此处会显示data的值
 </div>
<div>
 我是组件2
 {{this.$store.state.data}} //浏览器中此处会显示data的值
 </div>

5.那么怎么修改data呢,这时候就需要mutation出马了

mutation实质是一个函数,接收state和调用时传来的params参数

mutations: {
 changeDataMut(state,params){ 
  state.data = params
 }
}

6.mutation有了,接下来就需要在组件中调用它,记得要用commit触发

<template>
 <div>
 我是组件1
 <button @click='changeData'>改数据</button>
 </div>
</template>
<script> export default {
 data(){
  return {
   changeData(){
   // 通过commit 触发 mutation 并传参
    this.$store.commit('changeDataMut',10) //此时组件1和组件2中data都是10啦
   }
  }
 }
} </script>

7.action怎么用?

  • action也是函数。
  • 前面已经说到,action不能直接修改state,首先要在组件中通过dispatch触发action,然后在action函数内部commit触发mutation,通过mutation修改state状态值。
  • 注意action的参数
actions: {
 changeDataAct(context,params){ //context是一个对象,从它里面把咱们需要的commit方法解构出来
  let {commit} = context
  commit('changeDataMut',params)
 }
}

这时候可以在组件中触发action了,注意使用dispatch

<template>
 <div>
 我是组件2
 <button @click='changeData'>改数据</button>
 </div>
</template>
<script> export default {
 data(){
  return {
   changeData(){
    // 通过dispatch 触发 action 并传参
    this.$store.dispatch('changeDataAct',100)//此时data就变成100啦,并且组件1和组件2是同步的
   }
  }
 }
} </script>

8.getter的用法

  • getter 计算属性 ,依赖于state值,需要return
  • 现在咱们假设一个值double,它是data的两倍,并且会随着data发生改变
getters:{
 doubleGet(state){
  return state.data*2
 }
}
  • 我们可以在组件中使用它了
<div>
 我是组件2
 {{this.$store.getters.doubleGet}}
</div>

以上就是vuex的使用步骤的详细内容,更多关于vuex 使用的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue实现简易的双向数据绑定
Dec 29 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 Vue.js
vue实现简易音乐播放器
Aug 14 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 #Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 #Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 #Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 #Vue.js
vue3弹出层V3Popup实例详解
Jan 04 #Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 #Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 #Vue.js
You might like
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
浅谈node的事件机制
2017/10/09 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
linux下安装easy_install的方法
2013/02/10 Python
python正则表达式抓取成语网站
2013/11/20 Python
Python with的用法
2014/08/22 Python
Python制作爬虫抓取美女图
2016/01/20 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
python实现TF-IDF算法解析
2018/01/02 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
函授自我鉴定范文
2014/02/06 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript