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实现广告栏上下滚动效果
Nov 26 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
el-table-column 内容不自动换行的解决方法
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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
详解JavaScript的BUG和错误
2018/05/07 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python网络爬虫实例讲解
2016/04/28 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python 高阶函数简单介绍
2021/02/19 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
土木工程师职业规划范文
2014/03/07 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
关于召开会议的通知
2015/04/15 职场文书
演讲比赛主持词
2015/06/29 职场文书
新入职员工工作总结
2015/10/15 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python