Vue3中 pinia

Pinia是Vue3推荐的状态管理库,类似于Vuex但提供更简单的API和更好的TypeScript支持。它不再需要mutations,动态添加Store是默认的,且不使用modules的嵌套结构。创建和使用Pinia涉及到创建实例、定义store、声明state和actions,以及在组件中访问和修改状态。

pinia是一个用于vue的状态管理库,类似于vuex,是vue的另一种状态管理工具

Pinia意为菠萝,表示与菠萝一样,由很多小块组成。在pinia中,每个store都是单独存在,一同进行状态管理。 很多人也将pinia称为vuex5,因为pinia将作为vue3推荐的状态管理库,而vuex将不再迭代。

与vuex有什么不同

与 Vuex 相比,Pinia 提供了一个更简单的 API,具有更少的规范,提供了 Composition-API 风格的 API,最重要的是,在与 TypeScript 一起使用时具有可靠的类型推断支持

1.mutations 不再存在。

2.无需创建自定义复杂包装器来支持 TypeScript,所有内容都是类型化的,并且 API 的设计方式尽可能利用 TS 类型推断。

3.不再需要注入、导入函数、调用函数、享受自动完成功能!

4.无需动态添加 Store,默认情况下它们都是动态的

5.不再有 modules 的嵌套结构

pinia基本使用

1.创建pinia实例并挂载

//在main.ts中
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 引用
import {createPinia } from 'pinia'
// 创建Pinia实例
const Pinia = createPinia()
// 挂载pinia
createApp(App).use(Pinia).mount('#app')

2.在src目录下新建一个stroe文件夹,在文件夹中新建一个index.ts

3.通过import将下载好的pinia引入到index.ts中并导出 并且使用defineStore创建store对象

import { defineStore } from 'pinia'
​
// 
// 第一个参数是应用程序中 store 的唯一 id
export const useStore = defineStore('main', {
 
})

pinia--state

state 是 store 的核心部分。 我们通常从定义应用程序的状态开始。 在 Pinia 中,状态被定义为返回初始状态的函数。 Pinia 在服务器端和客户端都可以工作。

1.创建state

import { defineStore } from 'pinia'

// useStore 可以是 useUser、useCart 之类的任何东西
// 第一个参数是应用程序中 store 的唯一 id
export const useStore = defineStore('main', {
  state:()=>{//创建状态
    return {
        text:"我是pinia的一个状态变量"
    }
  }
})

2.组件中使用

<template>
  <div>
    <!-- 3.使用 -->
    我是测试pinia的组件--{{store.text}}
  </div>
</template>

<script lang="ts" setup>
// 1.引用
import 名字 from "你pinia编写的文件"
// 2.创建
let store=名字()
</script>

pinia--修改--action

修改方式1

1.组件内创建触发

调用修改方法 store.你在pinia中actions中创建的修改函数

<template>
  <div>
   
    我是测试pinia的组件--{{store.text}}
    <button @click="update()">点我修改</button>
  </div>
</template>

<script lang="ts" setup>
import {useStore} from "../store/index"
let store=useStore()

let update=()=>{
    // 调用修改方法 store.你在pinia中actions中创建的修改函数
        store.updatetext()
}
</script>

<style>

</style>

2.pinia中创建修改方法

import { defineStore } from 'pinia'



export const useStore = defineStore('main', {
  state:()=>{
    return {
        text:"我是pinia的一个状态变量"
    }
  },
  actions:{
    updatetext	(){//修改方法
        this.text="我变了"
    }
  }
})

修改方式2--$patch

$patch是pinia的内置方法 通过该方法可以直接修改state的数据

在组件内调用$patch便可直接修改数据

let update=()=>{
    store.$patch({
    		//你要修改state的数据: 你要修改的value值
        text:"我是$patch直接修改"
    })
}
### Vue 3Pinia 状态管理库的使用教程与最佳实践 #### 创建并初始化 Pinia 实例 为了在 Vue 3 应用程序中集成 Pinia,需先安装该库并通过创建实例来启用它。这一步骤确保了整个应用程序能够访问由 Pinia 提供的状态管理功能[^2]。 ```javascript import { createApp } from &#39;vue&#39;; import { createPinia } from &#39;pinia&#39;; const app = createApp(App); app.use(createPinia()); app.mount(&#39;#app&#39;); ``` #### 定义 Store 定义 store 是实现状态管理的核心部分。store 可以看作是一个容器,用于存储应用的数据以及操作这些数据的方法。通过 `defineStore` 函数可以轻松地创建一个新的 store。 ```typescript // counter.store.ts import { defineStore } from &#39;pinia&#39;; export const useCounterStore = defineStore(&#39;counter&#39;, { state: () => ({ count: 0, }), actions: { increment() { this.count++; }, }, }); ``` #### 组件间共享 State 和 Actions 一旦定义好了 store,在任何组件内部都可以方便地获取到其中的状态 (state) 或者执行动作(actions),从而实现了跨组件之间的数据同步和交互逻辑处理。 ```html <template> <div> Count is {{ counter.count }} <button @click="increment">Increment</button> </div> </template> <script setup lang="ts"> import { useCounterStore } from &#39;./stores/counter.store&#39;; const counter = useCounterStore(); function increment() { counter.increment(); } </script> ``` #### 高级特性支持 除了基本的功能外,Pinia 还提供了许多强大的高级特性和插件机制,允许开发者根据实际场景定制化自己的解决方案,例如持久化存储、调试工具集成等。 #### 类型安全保证 对于采用 TypeScript 的项目来说,Pinia 能够很好地兼容静态类型检查系统,提供完整的类型推断能力,使得代码更加健壮可靠[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值