首页 > 其他分享 >Pinia

Pinia

时间:2024-04-28 22:34:57浏览次数:11  
标签:const pinia state Pinia todo todos

Pinia 的基本介绍

Pinia 是一个西班牙语的单词,表示“菠萝”的意思。因为菠萝是由一小块一小块组成的,这个和 Pinia 的思想就非常的吻合,在 Pinia 中,每个 Store 仓库都是单独的扁平化的存在的。

Pinia 是由 Vue 官方团队中的一个成员开发的,最早是在 2019 年 11 左右作为一项实验性工作所提出的,当时的目的是将组合 API 融入到 Vuex 中,探索新版本的 Vuex 应有的形态,随着探索的进行,最终发现 Pinia 已经实现了 Vuex5 大部分的提案,因此 Pinia 就作为了最新版本的 Vuex,但是为了尊重作者本人,名字保持不变,仍然叫做 Pinia。

相比 Vuex,Pinia 的 API 更少而且更简单,还支持组合式 API,还可以和 Typescript 一起使用来做类型的推断。

pinia 官网:https://pinia.vuejs.org/

Pinia 优势

  1. 在 Pinia 中,已经不存在 mutations,只有 state、getters、actions
import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter',{
  state: () => ({
    count: 0
  }),
  getters: {
    doubleCount: state => state.count * 2
  },
  actions: {
    increment() {
      this.count++
    },
  }
})

在上面的代码中,我们创建了一个仓库,该仓库中提供三个选项,分别是 state、getters 以及 actions。

  1. actions 里面支持同步和异步来修改 store,相当于将之前 Vuex 中的 mutation 和 action 合并了
import { defineStore } from 'pinia'

export const useCounterStore = defineStore({
  // ...
  actions: {
    // 同步的修改仓库状态
    increment() {
      this.count++
    },
    decrement() {
      this.count--
    },
    // 异步的修改仓库状态
    async incrementAsync() {
      await new Promise(resolve => setTimeout(resolve, 1000))
      this.increment()
    },
    async decrementAsync() {
      await new Promise(resolve => setTimeout(resolve, 1000))
      this.decrement()
    }
  }
})
  1. 可以和 TypeScript 一起使用,以此来获得类型推断的支持
import { defineStore } from 'pinia'

// 这里定义了一个名为 Todo 的接口
interface Todo {
  id: number;
  text: string;
  done: boolean;
}

export const useTodoStore = defineStore({
  id: 'todo',
  state: () => ({9
    todos: [] as Todo[],
  }),
  getters: {
    completedTodos: state => state.todos.filter(todo => todo.done),
  },
  actions: {
    // text 指定了是 string 类型
    addTodoItem(text: string) {
      const id = state.todos.length + 1
      const newTodo = { id, text, done: false }
      state.todos.push(newTodo)
    },
    // todo 指定了是 Todo 类型
    toggleTodoItem(todo: Todo) {
      todo.done = !todo.done
    },
    async fetchTodos() {
      const response = await fetch('https://jsonplaceholder.typicode.com/todos')
      const todos = await response.json() as Todo[]
      state.todos = todos
    },
  },
})
  1. 关于 Store 仓库,每一个 Store 仓库都是独立的扁平化的存在的,不再像 Vuex 里面是通过 modules 嵌套
  2. 支持插件扩展,可以通过插件(函数)来扩展仓库的功能,为仓库添加全局属性或者全局方法
// ...
// 这里定义了一个名为 localStoragePlugin 的插件,本质上就是一个函数
const localStoragePlugin = (context: PiniaPluginContext) => {
  const key = 'my-app-state'

  // 从 localStorage 中恢复状态
  context.state = localStorage.getItem(key) || context.state

  // 监听 state 变化,将变化保存到 localStorage
  context.subscribe((mutation) => {
    localStorage.setItem(key, context.state)
  })
}
// ...

// 创建 Pinia 实例,并注册 localStoragePlugin 插件
const pinia = createPinia()
pinia.use(localStoragePlugin)
  1. 更加轻量,压缩之后体积只有 1kb 左右,基本上可以忽略这个库的存在

标签:const,pinia,state,Pinia,todo,todos
From: https://www.cnblogs.com/shmillly959/p/18164641

相关文章

  • Pinia 使用
    安装Pinianpminstallpinia在Vue应用中挂载Piniaimport{createPinia}from"pinia";//创建pinia实例constpinia=createPinia();createApp(App).use(router).use(pinia).mount("#app");在src目录下面创建仓库目录store,在该目录下面创建对应的仓库文件,注......
  • vue3 快速入门系列 —— 状态管理 pinia
    其他章节请看:vue3快速入门系列Piniavue3状态管理这里选择pinia。虽然vuex4已支持Vue3的CompositionAPI,但是vue3官网推荐新的应用使用pinia——vue3pinia集中式状态管理redux、mobx、vuex、pinia都是集中式状态管理工具。与之对应的就是分布式。Pinia符......
  • 前端【TS】03-typescript【基础】【Pinia】
    介绍 什么是PiniaPinia是Vue的专属的最新状态管理库,是Vuex状态管理工具的替代品 手动添加Pinia到Vue项目1.使用Vite创建一个空的TS+Vue3项目1npmcreatevite@latestvue-pinia-ts----templatevue-ts2.按照官方文档安装pinia到项......
  • pinia vue3
    修改值https://blog.csdn.net/qq_42543244/article/details/123407045只修改一个值:直接修改请注意,store是一个用reactive包装的对象,这意味着不需要在getters后面写.value。就像setup中的props一样,我们不能对它进行解构https://pinia.vuejs.org/zh/core-concepts/#u......
  • Java登陆第四十三天——Pinia
    到目前一共学习了两种传参方式。 1.组件传参 2.路由传参这两种传参方式并不好用,所以出现了PiniaPinia平替了Vuex,而且比它更优秀。Pinia是Vue衍生的生态系统之一,所以,在使用它前需要导入依赖。npmipinia简单地说,Pinia就是共享数据。各个.vue组件可以利用Pinia更好的完成......
  • nuxt3_使用pinia实现服务器端渲染状态管理
    目录安装nuxt3的pinia包修改nuxt.config.ts的配置在项目中创建pinia仓库创建本地的测试服务器用于测试ssr在nuxt项目中创建服务器端请求接口在/article/[id]路由页面中实现服务器端渲染使用postman向http://localhost:3000/article/95发送请求修改路由配置实现页面数据缓存安装nu......
  • Vuex和Pinia
    一、区别     pinia它没有mutation,他只有state,getters,action【同步、异步】使用他来修改state数据。pinia默认也是存入内存中,如果需要使用本地存储,配置上比vuex麻烦一点。pinia语法比vuex更容易理解和使用,灵活。pinia没有modules配置,没一个独立的仓库,都是definSto......
  • Vue3+TS+Vite+pinia
    一、创建项目    创建文件夹,然后cmd,输入以下内容。然后选择TS版本。npmcreatevite二、安装依赖   在vscode中,使用终端,输入命令 npmi三、安装其他插件    3.1、路由vue-router        多页面应用需要安装路由。所以需要使用v......
  • 03_Pinia的使用
    官网:Pinia|TheintuitivestoreforVue.js(vuejs.org)Pinia是一个轻量级的状态管理库。Pinia可以处理大型项目中复杂的状态管理需求,而父传子、子传父以及跨组件通信,可以解决一些简单的状态传递问题。打开cmd转到当前项目目录下,安装命令:npminstallpinia 修改main.js......
  • Pinia - vue 的状态管理库
    Pinia-vue的状态管理库1.介绍Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。2.安装和注册Pinia安装piniayarnaddpinia注册piniaimport{createApp}from'vue'import{createPinia}from'pinia'importAppfrom'./App.vue'constpini......