我们一起看看Vuex使用流程是什么样的?

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

[[402869]]

一、使用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 模块化管理

使用流程

1.创建store实例并且导出 store.js

  1. import Vue from 'vue' 
  2. import Vuex from 'vuex' 
  3. Vue.use(Vuex) 
  4. const store = new Vuex.Store({ 
  5.     //声明state 
  6.     state: {  
  7.       userInfo:{ userName:"" } 
  8.     },        
  9.     //声明mutations 
  10.     mutations: { 
  11.       setUserInfo(state,userInfo){   
  12.         state.userInfo = userInfo 
  13.       } 
  14.     },    
  15.     //声明actions 
  16.     actions: { 
  17.       setUserInfo({ commit },userInfo){ 
  18.         commit('setUserInfo',userInfo) 
  19.       } 
  20.     },     
  21.     //声明getters 
  22.     getters:{ 
  23.       userName(state){ 
  24.         return "姓名:"+state.userInfo.userName 
  25.       } 
  26.     } 
  27. }) 
  28. export default store 

2.引入Vuex

  1. import Vue from 'vue' 
  2. import App from './App.vue' 
  3. import store from './store' 
  4. new Vue({ 
  5.   render: h => h(App), 
  6.   store 
  7. }).$mount('#app'

3.组件内使用

使用方式一

  1. <template> 
  2.  <div> 
  3.      <!-- state使用 --> 
  4.      <p>{{$store.state.userInfo.userName}}</p> 
  5.      <!-- getters使用 --> 
  6.      <p>{{$store.getters.userName}}</p> 
  7.      <!-- action使用 --> 
  8.      <p @click="setInfo">存储信息</p> 
  9.  </div> 
  10. </template> 
  1. export default { 
  2.    methods: { 
  3.       setInfo(){ 
  4.         this.$store.commit('setUserInfo',{ 
  5.           userName:"鬼鬼"  
  6.        })  
  7.      } 
  8.    } 

使用方式二

  1. <template> 
  2.  <div> 
  3.      <!-- state使用 --> 
  4.      <p>{{userInfo.userName}}</p> 
  5.      <!-- getters使用 --> 
  6.      <p>{{userName}}</p> 
  7.      <!-- action使用 --> 
  8.      <p @click="setInfo">存储信息</p> 
  9.  </div> 
  10. </template> 
  1. import { mapState, mapGetters, mapMutations, mapActions } from 'vuex' 
  2. export default { 
  3.   methods: { 
  4.     ...mapActions(['setUserInfo']), 
  5.     // ...mapMutations(["setUserInfo"]), 
  6.     setInfo(){ 
  7.       this.setUserInfo({ 
  8.          userName:"鬼鬼"  
  9.      }) 
  10.   }, 
  11.   computed: { 
  12.     ...mapState({  
  13.         userInfo: state => state.userInfo 
  14.      }), 
  15.     ...mapGetters(['userName']), 
  16.   } 

本文转载自微信公众号「前端人」,作者鬼哥。转载本文请联系前端人公众号。

 

责任编辑:武晓燕 来源: 前端人
相关推荐

2023-03-29 08:26:06

2022-09-26 14:25:55

Flowable流程ID

2022-01-19 08:35:24

指标敏感度CTR

2024-06-26 08:14:43

2022-02-23 08:41:58

NATIPv4IPv6

2023-04-11 07:43:32

PostmanGraphQL查询。

2018-07-12 12:13:55

华为

2017-02-08 10:01:13

大数据ETL技术

2022-08-01 07:57:03

数组操作内存

2023-03-26 12:45:52

Linux内核头文件

2023-05-09 07:51:28

Spring循环依赖

2014-02-25 09:55:07

敏捷开发

2020-02-24 08:58:46

数据架构技术

2012-08-29 14:00:23

2017-01-22 15:09:08

架构闭环演进

2023-04-26 07:30:00

promptUI非结构化

2022-10-30 15:03:25

人工智能仓库管理机器人

2022-10-08 00:00:05

SQL机制结构

2022-05-26 00:19:29

通信信息5G

2023-07-24 08:27:38

点赞
收藏

51CTO技术栈公众号