• vue状态管理工具


    一、Pinia简介和五大优势

    Pinia 是 Vue.js 的轻量级状态管理库,官方网站:https://pinia.vuejs.org。

    Pinia是vue生态里Vuex的替代者,一个全新的vue状态管理库。在Vue3成为正式版以后,尤雨溪强势推荐的项目就是Pinia。
    那先来看看Pinia比Vuex好的地方,也就是Pinia的五大优势。

    1. 可以对Vue2和Vue3做到很好的支持,也就是老项目也可以使用Pinia。
    2. 抛弃了Mutations的操作,只有state、getters和actions.极大的简化了状态管理库的使用,让代码编写更加容易直观。
    3. 不需要嵌套模块,符合Vue3的Composition api ,让代码更加扁平化。
    4. 完整的TypeScript支持。Vue3版本的一大优势就是对TypeScript的支持,所以Pinia也做到了完整的支持。如果你对Vuex很熟悉的化,一定知道Vuex对TS的语法支持不是完整的(经常被吐槽)。
    5. 代码更加简洁,可以实现很好的代码自动分割。Vue2的时代,写代码需要来回翻滚屏幕屏幕找变量,非常的麻烦,Vue3的Composition api完美了解决这个问题。 可以实现代码自动分割,pinia也同样继承了这个优点。

    二、Pinia开发环境安装

    pinia的安装指令:npm i pinia

    如果通过以下步骤创建的vue项目就已经默认安装了pinia:

    1.  1、执行命令 npx nrm use taobao  (npm的镜像服务器切换到国内的淘宝镜像,一台电脑执行一次即可)
    2.  2、npx create-vue vue-test 创建vue-test项目
    3.  3、cd vue-test  进入vue-test项目
    4.  4npm i 安装依赖包
    5.  5npm run dev 打开项目

    如果创建好vue项目没有pinia的话在通过安装pinia的指令进行安装。

    三、用Pinia的方式创建store文件

    1.在main.js文件里引入并挂载Pinia

    import { createPinia } from 'pinia'

    引入之后,通过createPinia( )方法,得到pinia的实例,然后将Pinia挂载到Vue根实例上。

    1. //注册Pinia插件
    2. app.use(createPinia())

    2.创建store状态管理库

    直接在/src目录下,新建一个store文件夹。有了文件夹之后,再创建相关的store文件。

    在这个文件里的代码,一般只做下面几件事:

    1. 定义状态容器(仓库)
    2. 修改容器(仓库)中的 state(状态数据)
    3. 仓库中的 action 的使用(修改状态:包括同步和异步,pinia 中没有 mutations)
    4. getters:类似于计算属性

    第一步:定义状态容器(仓库)

    1. import {defineStore} from "pinia";
    2. export const useTodoStore=defineStore({
    3. id:"todo",//id
    4. state:()=>({//状态数据
    5. }),
    6. getters:{//计算属性
    7. },
    8. actions:{//方法
    9. }
    10. });

    这段代码很像vue的小组件,这也是Pinia的优点。

    • id属性:每个store文件都有唯一的一个id属性。
    • state 属性: 用来存储全局的状态的,这里边定义的,就可以是为SPA里全局的状态了,是每个页面和组件都可以通过Pinia方法读取到的。
    • getters属性: 用来监视或者说是计算状态的变化的,有缓存的功能。
    • actions属性: 对state里数据变化的业务逻辑,需求不同,编写逻辑不同。说白了就是修改state全局状态数据的。

    第二步:store文件创建之后就可以在里面写需要使用的state状态数据、gettres属性及actions属性。

    3.在vue组件里读取store数据

    在/src/components文件夹中新建一个.vue文件,使用步骤如下:

    第一步:在中引入store文件:

    import {useTodoStore} from "@/stores/todo.js";

    为了实现数据的双向绑定,通过store解构出来的state需要通过storeToRefs()修饰,所以要引入storeToRefs:import {storeToRefs} from "pinia";

    第二步:实例化store:const store=useTodoStore();

    第三步:

    获取state或getters:

    const{filterList,filter}=storeToRefs(store);

    获取到state之后可以在组件中直接使用

    获取actions:

    const {deleteTodoList}=store;

    方法可以直接获取,不需要修饰。

    如果页面中有自定义的变量,需要通过ref修饰变成双向绑定的变量,此时需要引入ref写法如下:

    引入:import {ref} from 'vue';

    使用:const msg=ref("");//自定义变量

            const changeTitle=(item)=>{//通过修改自定义变量的value值实现数据的双向绑定
            item.title=msg.value;
            item.edit=false;
            msg.value="";
        }

    四、数据持久化

    安装pinia-plugin-persistedstate插件可以辅助实现数据持久化功能。

    1.安装指令:npm i pinia-plugin-persistedstate

    2.使用

    在main.js中引入:import persistedState from "pinia-plugin-persistedstate"

    注册使用:app.use(createPinia().use(persistedState))

    3.在对应的store文件里开启persist 

    persist: true,//开启数据缓存   与状态  方法并列写

    数据默认存在 sessionStorage 里,并且会以 store 的 id 作为 key。

  • 相关阅读:
    Python 基础合集1:基本数据类型
    Less预处理——变量和嵌套
    【毕业设计】深度学习 opencv python 实现中国交通标志识别
    Java 中代码优化的 30 个小技巧(下)
    如何学习可编程逻辑控制器(PLC)?
    SpringBoot前端后端分离之Nginx服务器
    SMART PLC星三角延时启动功能块(梯形图FC)
    jvm 内存模型概述
    提升用户体验,给你的模态弹窗加个小细节
    第三章 常用Shell(Bash)命令
  • 原文地址:https://blog.csdn.net/Doulvme/article/details/126303361