Vuex 的基本使用、五大核心、辅助函数以及持久化插件(vuex-persistedstate)

Vuex 的基本使用

当我们创建项目时配置脚手架可以直接选择vuex,这样后期不用我们自己配置vuex,如果没有选择,但是我们又要用到vuex怎么办呢?

1.安装vuex依赖包

npm install vuex --save

2.导入vuex包

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

3.创建store对象

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);

export default new Vuex.Store({
  // 仓库数据本身
  state: { count: 0 },
  // 修改仓库数据的唯一方式 改变状态
  mutations: {},
  // 仓库中的计算属性
  getters: {},
  // 异步修改仓库数据 最终只能还是mutations修改仓库数据
  actions: {},
  // 模块化
  modules: {},
});

4.将Store对象挂载到vue实例中

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

vuex五大核心

1、什么是vuex?
vuex是一个专门为 Vue.js 应用设计的状态管理架构,是vue的状态管理工具,统一管理和维护各个vue组件的可变化状态,也就是说vuex就是一个存放公共数据的仓库

2、vuex有五个核心概念
state:vuex的基本数据,用来存储需要变更的变量。
geeter:可以理解为store的计算属性。
mutations:用来修改提交store中的数据,每个mutation斗鱼一个字符串的时间类型(type)和一个回调函数(handler),这个回调函数就是需要实际进行状态修改的地方,但是前提是不许要是同步(如需异步操作可用到actions)
action:action提交的是mutation,不能直接变更状态,action可以包含任意异步操作
modules:将vueX中的store进行模块化,使每个模块都拥有自己的的state、mutation、action、getter。

vuex中的辅助函数

vuex官方给我们提供了一系列辅助函数来简化我们的代码,也就是 {mapState, mapMutations, mapActions, mapGetters},使用这些函数会让我们的代码更简洁

注:

  • mapStatemapGetters返回的是属性,所以混入到 computed 中
  • mapMutationsmapActions返回的是方法,只能混入到methods中
<template>
  <div>
    <div>
      <h3>{{ log }}</h3>
    </div>
    数量<span>{{ number }}</span> <br />
    <el-button type="success" @click="add">+</el-button>
    <el-button type="info" @click="jianj">-</el-button>
  </div>
</template>

<script>
import { mapState, mapMutations} from "vuex";

export default {
  name: "",
  props: [],
  components: {},
  data() {
    return {
      // num:999,
    };
  },
  methods: {
    //数组
    // ...mapMutations(["addNum","jian"]),
    //对象
    ...mapMutations({ add: "addNum", jianj: "jian" }),
    
    //老套方法
    // addfn(){
    //   this.$store.commit("addNum")
    // },

    // addjian(){
    //   this.$store.commit("jian")
    // }
  },
  mounted() {},
  watch: {},
  computed: {
    //对象
    ...mapState({ number: "num", log: "log" }),
    //字符串
    // ...mapState(["log","num"]),

    // log() {
    //   return this.$store.state.log;
    // },
  },
};
</script>

<style scoped>
div {
  text-align: center;
}
</style>

vuex中使用

import Vue from 'vue'
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    list:[],
    login:{},
    log:'我是一句话',
    num:100,
  },
  mutations: {
    //点击加加
    addNum(state){
      state.num ++
    },
    //减减
    jian(state){
      state.num --
    },
  },
  actions: {

  },
  plugins: [
    new persist({
        storage: window.localStorage,
    }).plugin,
]
})


本地存储持久化插件(vuex-persistedstate)解决刷新数据消失的问题

页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex就可以被应用了。

vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。

vuex劣势:在F5刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。

vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,
这时候我们可以使用插件-vuex-persistedstate做到数据持久化,这个插件会帮助我们把state里的数据存进本地存储中

使用方法如下所示

1、安装本地存储(持久化插件)

npm i vuex-persist --save

2、在store下的index.js中引入

import persist from "vuex-persist";

3、设置插件配置 跟state同一级的地方设置如下代码

plugins: [
    new persist({
        storage: window.localStorage,
    }).plugin,
],
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小 Ziyi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值