vue3中vuex的使用及永久化存储

一、前言

Vuex是做什么的?

Vue官方:状态管理工具

状态管理是什么?

需要在多个组件中共享的状态、且是响应式的、一个变,全都改变。

例如一些全局要用的的状态信息:用户登录状态、用户名称、地理位置信息、购物车中商品、等等

这时候我们就需要这么一个工具来进行全局的状态管理,Vuex就是这样的一个工具。

vuex内部结构如下:

//创建store对象并导出store
import { createStore } from "vuex";
export default createStore({
  // 存放数据
  state: {
    boy: 185,
    girl: 432,
    text: "vuex仓库",
  },
  // 类似计算属性
  getters: {
    // 默认参数可获取state中所有数据,必须有返回值,依赖值发生改变会重新计算
    getSum(state) {
      return state.boy + state.girl;
    },
  },
  // 修改state中的属性
  mutations: {
    // 默认参数可获取state中所有数据,第二参数为页面传入数据
    godownChange(state, ele) {
      // 通过事件可对state内任意数据进行修改
      state.boy = ele;
    },
  },
  // 异步操作
  actions: {},
  // 模块化
  modules: {},
});

二、vuex的使用

  • 在页面中使用vuex的数据可通过store.state.属性名store.getters.方法名获取
  • 在页面中不能直接修改vuex的数据,必须通过vuex中的store.commit()发送事件至vuex修改

页面获取vuex仓库的数据

<template>

  <div class="box">

    {{ cont }}{{ num }}
  </div>

</template>

<script setup>

// 引入

import { reactive, toRefs } from 'vue';

import { useStore } from 'vuex'; //引入useStore 方法

const store = useStore() // 该方法用于返回store实例

const data = reactive({

  cont: '',
  num:0
})
//通过store.state.属性名获取vuex数据
data.cont = store.state.text
//通过store.getters.方法名获取vuex数据
data.num = store.getters.getSum
// 解构数据

const { cont,num } = toRefs(data)
</script>

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

修改vuex的数据

<template>

  <div class="box">

    <button @click="storeChange">修改vuex</button>
  </div>

</template>

<script setup>

// 引入

import { reactive, toRefs } from 'vue';

import { useStore } from 'vuex'; //引入useStore 方法

const store = useStore() // 该方法用于返回store实例

const data = reactive({

  num: 100,
})
function storeChange() {
  // 第一个参数为传递的事件名,第二个参数为页面传入数据
  // 第二个参数页面传入数据为可选项,没有参数可以忽略
  store.commit('godownChange', data.num)
}
// 解构数据

const { cont, num } = toRefs(data)
</script>

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

三、vuex持久化存储

下载命令

npm install --save vuex-persistedstate

store.js使用

import { createStore } from "vuex";
// 引入 persistedstate 组件
import createPersistedState from 'vuex-persistedstate'
export default createStore({
  state: {},
  getters: {},
  mutations: {},
  actions: {},
  modules: {},
  // 在store对象内创建plugins: [createPersistedState()]
  plugins:[createPersistedState()]
});
  • 有以下数据,表示引入持久化成功

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYiZ5msd' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片