Vue3——Pinia

目录

什么是 Pinia?

为什么选择 Pinia?

基本使用

安装pinia

配置pinia

定义store

使用

持久化插件 


什么是 Pinia?

Pinia 是一个轻量级的状态管理库,专为 Vue 3 设计。它提供了类似 Vuex 的功能,但 API 更加简洁,并且完全支持 TypeScript。Pinia 的设计理念是简单、直观和可扩展,使其成为 Vue 3 生态系统中状态管理的理想选择。

官网:简介 | Pinia

为什么选择 Pinia?

  1. 简单易用:Pinia 的 API 设计简洁,学习曲线平缓。
  2. TypeScript 支持:Pinia 原生支持 TypeScript,提供更好的类型推断和开发体验。
  3. 模块化设计:Pinia 允许你将状态拆分为多个模块,便于维护和扩展。
  4. 插件系统:Pinia 支持插件系统,可以轻松扩展功能(如持久化存储)。

基本使用

pinia的使用步骤:

  1. 在项目中安装pinia
  2. 配置pinia到main.js中
  3. 创建Store并导出
  4. 在 其他组件中引入使用

安装pinia

    需要在控制台使用命令:npm install pinia

配置pinia

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const app = createApp(App)
const pinia = createPinia() // 创建 Pinia 实例

app.use(pinia) // 注册 Pinia
app.mount('#app')

定义store

    在src目录下新建目录stores,在里面创建一个js文件,这里命名为User.js。在该文件使用defineStore函数,定义store的名称,数据或方法,最后导出。具体代码如下:

import { ref, reactive } from "vue";
import { defineStore } from "pinia";

export const UserStore = defineStore('UserStore', () => {
  const user = reactive({
    name: "张三",
    age: 19
  })

  const num = ref(0)
  const speak = () => {
    console.log("userstore");

  }
  return {
    user, num, speak
  }
})

使用

接下来去其他组件中使用定义好的store。

import { UserStore } from './stores/User';
const user = UserStore()
console.log(user.user.age);

使用pinia定义的数据是所有组件共享的,当某个组件改变了它的值,其他使用了该数据的组件内的值也会随之改变

持久化插件 

把pinia定义好的数据存储到本地的localstore中实现持。久化存储,这时需要使⽤⼀个插件:pinia-plugin-persistedstate。整体使用步骤和pinia差不多。

安装: npm i pinia-plugin-persistedstate

 配置:

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import App from './App.vue'

const app = createApp(App)
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate) // 注册持久化插件

app.use(pinia)
app.mount('#app')

启用持久化:只需在defineStore加上一个参数即可:


示例:说明数据是共享的,以及数据的持久化

 user.js:

import { ref, reactive } from "vue";
import { defineStore } from "pinia";

export const UserStore = defineStore('UserStore', () => {
  const user = reactive({
    name: "张三",
    age: 19
  })

  const num = ref(0)
  const speak = () => {
    console.log("userstore");

  }
  return {
    user, num, speak
  }
},
  {
    persist: true
  }
)

app.vue:

<script setup>
import { UserStore } from './stores/User';
import Son from './components/Son.vue';
const user = UserStore()
console.log(user.user.age);

const add = ()=>{
  user.user.age++
}


</script>

<template>
  <div>
    <router-view></router-view>
    <button @click="add">修改一下store内的值</button>
    <Son></Son>
  </div>
</template>

<style scoped>

  
</style>

 

son.vue:

<script setup>
import { UserStore } from '../stores/User';
const user = UserStore()

const asd=()=>{
  console.log(user.user.age);
  
}
console.log(user.user.age);
</script>

<template>
  <div>
    <button @Click="asd">我是子组件的,点我打印store</button>
    {{ user.user.age }}
  </div>
</template>

<style scoped></style>

 

Vue3Pinia是一种组合使用的方式,用于实现Vue应用程序的状态管理。Pinia是一个状态管理工具,类似于Vuex,但提供了更简单和更灵活的语法。它支持Vue2和Vue3,并且是类型安全的,支持TypeScript。Pinia可以创建多个全局仓库,而不需要像Vuex那样嵌套模块,使得状态管理的结构更加简单和清晰。相比于Vuex,Pinia的API更少,使用起来更加简单。Pinia的大小仅有1KB,非常轻量级。你可以通过引入Pinia和创建Pinia实例来开始使用Pinia。同时,Pinia还支持数据持久化插件,可以帮助你实现数据的持久化存储。你可以在Pinia的官方文档中找到更详细的使用说明和示例代码。\[2\]\[3\] #### 引用[.reference_title] - *1* [一步步打造最新前端框架组合 —— vite+vue3+pinia+vue-router@4+setup+ts](https://blog.csdn.net/jmszl1991/article/details/122825151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Vue3+Pinia+数据持久化 20分钟快速上手](https://blog.csdn.net/zhgweb/article/details/129708483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值