IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 当你踏进Pinia的时候你就会感觉——发现了新大陆 -> 正文阅读

[JavaScript知识库]当你踏进Pinia的时候你就会感觉——发现了新大陆

Pinia 快速体验中了解

在这里插入图片描述

概述

官网解释👇
Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。

从上面官网的解释不难看出,Pinia和Vuex的作用是一样的,它也充当的是一个存储数据的作用,存储在pinia的数据允许我们在各个组件中使用。

就是一个全新的用于Vue的状态管理库(与之前使用角度和vuex思想几乎一样,更简单了),可以认为是最新版本的Vuex

核心对比

2
在Vuex中有四个核心概念:State、Mutations、Actions、Getters
在Pinia中:State、Actions、Getters,去除了Mutations

特性

  • 直观,像定义vue的component一样定义
  • 完整的TypeScript支持
  • actions支持同步和异步
  • vue Devtools支持Pinia,提供更好的开发体验
  • 能够构建多个stores,并实现自动代码拆分
  • 及其轻量(1kb),甚至感觉不到他的存在

快速体验

  1. 安装pinia

    yarn add pinia -S
    # 或者使用 npm
    npm install pinia -S
    # 或者使用pnpm
    pnpm install pinia -S
    
  2. 在main.js中引入pinia并与vue结合

    import { createApp } from 'vue'
    import { createPinia } from "pinia"
    const pinia = createPinia() // 创建pinia
    const app = createApp(App);
    app.use(pinia);
    app.mount('#app')
    
  3. 创建src/store/mainStore.js文件 内部引入pinia的defineStore方法

    import { defineStore } from 'pinia'
    
    export default defineStore('main', {
      state() {
        return {
          test: 10,
        }
      }
    })
    /*
    defineStore参数解析:
    	export default defineStore(“id”,{
    	  state :() =>{},//用于储存状态,类似于组件中的data选项
    	  getters: {}, // 类似与组件的computed,用来封装计算属性,有缓存的功能接受一个state可选参数
    	  actions: {},//类似于组件的methods,封装业务逻辑,修改state
    	})
    	参数1:相当于容器的ID(id为任意字符串),必须唯一,将来pinia会把所有的容器挂载到根容器
    	参数2:选项对象,用于放入state、getter、actions等
    */
    
  4. 在组件中使用

    <template>
      <div class="home">
        <h1>pinia的main展示:{{ mainStore.test }}</h1>
      </div>
    </template>
    
    <script>
    import useMainStore from "@/store";
    import { storeToRefs } from "pinia";
    
    export default {
      name: "Home",
      setup(props, context) {
        const mainStore = useMainStore();
    	//注意:如果使用解构的方式拿值,需要使用pinia提供的storeToRefs方法否则会丢失响应式
    	const { test } = storeToRefs(useMainStore());
    
        return { mainStore , test };
      },
    };
    </script>
    
  5. 在组件中修改pinia中的state

    • 修改单个状态可直接修改
      const updateState = () => {
        mainStore.test = 666;
      };
      
    • 修改多个状态可使用$patch方法批量修改
      const updateState = () => {
        mainStore.$patch((state) => {
          state.test = 666;
          state.test2 = 777;
        });
      };
      
    • 重置该store中的state使用$reset方法,可重置为初始值
      const resetState = () => {
        mainStore.$reset();
      };
      
    • 监听store中的state,当state改变时执行
      mainStore.$subscribe((stateInfo, state) => {
          console.log("状态信息", stateInfo);
          onsole.log("状态", state);
      });
      
  6. 在src/store/mainStore.js文件中添加getters属性

    import { defineStore } from 'pinia'
    
    export default defineStore('main', {
      state() {
        return {
          test: 10,
          test2: 10,
        }
      },
      getters: {
    	sumTest(state) {
    	  // 在此也可以直接使用this
          // state 所有状态
          return state.test * 10
    	}
      }
    })
    

    在组件中直接使用该仓库的store对象中直接获取即可

    const getStoreGetter = () => {
      console.log(mainStore.sumTest);
    };
    
  7. 在src/store/mainStore.js文件中添加actions属性

    import { defineStore } from 'pinia'
    
    export default defineStore('main', {
      state() {
        return {
          list: []
        }
      },
      actions: {
          getList() {
          // 在此也可以直接使用this
    	      return new Promise((resolve, reject) => {
    	        setTimeout(() => {
    	          this.list = [
    	            {
    	              name: '张三',
    	              age: 25,
    	            }
    	          ]
    	          resolve(this.list)
    	        }, 1000)
    	      })
        	}
        }
    })
    

    在组件中直接使用该仓库的store对象中直接调用即可

    const getStoreAction = () => {
        console.log(mainStore.getList());
    };
    



到这里就结束了,后续还会更新 vue 系列相关,还请持续关注!
感谢阅读,若有错误可以在下方评论区留言哦!!!

111

推荐文章👇
Pinia的简单使用
一文搞懂pinia状态管理(保姆级教程)

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:55:10  更:2022-08-19 18:56:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:12:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码