Pinia 的使用

417 阅读1分钟

1.Vuex 3.x 是基于 Vue 2 提供的Vuex, 而 Vuex 4.x 是 为Vue 3提供的Vuex。

2.为啥要用Pinia?优势在哪里?

  • Pinia 是一个 Vue 的存储库, 它能让你跨组件/页面共享状态.如果你熟悉组合式 API;
  • 对于一个单页面应用可以使用Vuex,但是如果这是一个服务端渲染应用时,你的应用将暴露在安全漏洞之中
  • 优势: - 1.Vue-Devtools 支持

- 2.模块热替换

- 3.插件的使用

- 4.支持服务端渲染

- 5.为JS用户提供适当的 TypeScript 支持与自动完成功能

3.如何使用pinia?

  • 安装 yarn add pinia
  • 引入
import { createPinia } from 'pinia';
app.use(createPinia())
  • 使用
1.创建store文件夹 里面创建index.js,如下
import { defineStore } from "pinia";
export const useMainStore = defineStore('counter', {
 //数据存储
    state: () => {
        return {
            userName: '我是李四',
            userAge: 35
        }
    },
    //计算属性
    getters: {
        // 自动地推断返回值类型为一个数
        doubleAge(state) {
            return state.userAge * 2
        },
    },
    // 操作方法
    actions: {
        changeName(newName) {
            this.userName = newName
        }
    }
})
2.页面使用
import { useMainStore } from "@/stores/store";
import { storeToRefs } from 'pinia'
export default {
  setup() {
    // 访问方法
    
    const store = useMainStore();
    //为了从`store`中提取属性,同时保持其反应性,您需要使用`storeToRefs()`。它将为任何响应性(reactivity)属性创建引用。当您只使用存储中(`store`)的状态,而不调用任何动作时,这很有用:
    const { userName, userAge,doubleAge } = storeToRefs(store);
    //修改名称和年龄
    
    // 修改方法
    const changeName = () => {
    // `store` 的`$state`属性设置为新对象来替换 `store` 的整个状态:
      store.$state={userName:"我是王五",userAge:25}
    };
    // 订阅方法
    
    //通过`$subscribe()`store的方法观察状态及其变化
    
    return {
      store,
      userName,
      userAge,
      doubleAge,
      changeName,
    };
  },
};