Vue3状态管理


一、Vuex4.x

vuex是vue做状态管理的,那vuex3.x和vuex4.x有什么改变呢?让我们来看看。

二、使用步骤

1.引入方式

代码如下(示例):

import {createStore} from 'vuex'

2.state

代码如下(示例):

//store文件
export default createStore({
  state: {
    name:'小明',
    age:18
  }
  )}

//组件使用
<template>
    <common-a></common-a>
  {{num}}
  {{name}}

</template>

<script setup>
import CommonA from '../components/CommonA.vue'
import {useStore} from 'vuex'
let store = useStore()
let num = computed(()=>store.state.age)
let name = computed(()=>store.state.name)
</script>

在这里如果我们直接使用store.state.age获取我们的状态,他拿到的是age这个实际的值,并不是响应式数据,我们需要使用computed计算属性来获取这个响应式数据, computed(()=>store.state.age)


2.getter

 getters: {
    addAge(state){
      console.log('addAge')
      return state.age + 10
    }
  },

3.mutations

mutations: {
    changeName(state,str){
      state.name= str
    },
    changeAge(state,val){
      state.age += val
    }
  },

4.actions

   actions: {
    changeAge(context,val){
      console.log(context)
      context.commit("changeAge",val)
    }

  },

5.组件使用

  <template>
    <common-a></common-a>
  {{num}}={{addAge}}{{addAge}}{{addAge}}{{addAge}}
  {{name}}
  <button @click="changeName">改名</button>
  <button @click="changeAge">改年龄</button>
</template>

<script setup>
import CommonA from '../components/CommonA.vue'
import {useStore} from 'vuex'
let store = useStore()
let num = computed(()=>store.state.age)
let name = computed(()=>store.state.name)
let addAge = store.getters.addAge
console.log(store)
const changeName = ()=>{
  store.commit("changeName","小红")
}
const changeAge = ()=>{
  store.dispatch("changeAge",1)
}
</script>

<style scoped lang="less">
</style>


getters,mutations,actions的使用和vue3.x没有太大区别


三、Vuex持久化存储

1.本地存储

2.使用插件

2.1下载插件

yarn add vuex-persistedstate
// 或
npm install --save vuex-persistedstate

2.2配置使用插件

import Vuex from "vuex";
// 引入插件
import createPersistedState from "vuex-persistedstate";

Vue.use(Vuex);

const store = new Vuex.Store({
    state,
    mutations,
    actions,
    /* vuex数据持久化配置 */
    plugins: [
        createPersistedState({
            // 存储方式:localStorage、sessionStorage、cookies
            storage: window.sessionStorage,
            // 存储的 key 的key值
            key: "store",
            render(state) {
            // 要存储的数据:本项目采用es6扩展运算符的方式存储了state中所有的数据
                return { ...state };
            }
        })
    ]
});

export default store;

总结

vuex4在使用上和之前没有太大区别,增加了一些API。
链接学习:
https://vuex.vuejs.org/api/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值