Vue3 Pinia 状态库的使用

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。 如果您熟悉 Composition API,您可能会认为您已经可以通过一个简单的 export const state = reactive({}). 这对于单页应用程序来说是正确的,但如果它是服务器端呈现的,会使您的应用程序暴露于安全漏洞。

 Pinia的好处?

  • dev-tools 支持

        跟踪动作、突变的时间线
        Store 出现在使用它们的组件中
        time travel 和 更容易的调试

  • 热模块更换 

        在不重新加载页面的情况下修改您的 Store
        在开发时保持任何现有状态

  • 插件:使用插件扩展 Pinia 功能
  • 为 JS 用户提供适当的 TypeScript 支持或 autocompletion
  • 服务器端渲染支持

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

下面让我们在Vue3项目中使用Pinia:

        第一步下载Pinia:

              npm install pinia 

        第二步在 main.js 中配置pinia 全局引入:

         

 下面创建pinia 数据:

        stores/counter.js

// stores/counter.js
import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
    state: () => {
        return { count: 0 }
    },
    // 也可以定义为
    // state: () => ({ count: 0 })
    actions: {
        // 加数量方法
        increment() {
            this.count++
        },
    },
})

 在组件中使用:

        

<template>
    <!-- 渲染 -->
    {{ counter.count }}
    <!-- 触发方法数量加一 -->
    <el-button @click="add">加一</el-button>
</template>

<script setup>
import { useCounterStore } from '@/stores/counter'
// 获取pinia中的数据
const counter = useCounterStore()

// 加数量方法
function add() {
    counter.$patch({ count: counter.count + 1 })

    // 或使用 action 代替  触发action 方法
    // counter.increment()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3 Pinia是一个基于Vue3的状态管理,它提供了类似于Vuex的全局状态管理能力,同时使用起来更加简单方便。下面是Vue3 Pinia的使用步骤: 1. 安装Vue3 Pinia 你可以使用npm或者yarn安装Vue3 Pinia: ``` npm install pinia ``` 或者 ``` yarn add pinia ``` 2. 创建Pinia Store 你需要创建一个store来管理你的状态。一个store就是一个拥有状态和操作状态的对象。下面是一个例子: ``` import { defineStore } from 'pinia' export const useCounterStore = defineStore({ id: 'counter', state: () => ({ count: 0 }), actions: { increment() { this.count++ } } }) ``` 这个例子中,我们创建了一个名为useCounterStore的store,它拥有一个状态count,初始为0,并且有一个操作increment,用来增加count的。 3. 在Vue组件中使用Store 你可以在Vue组件中使用createPinia函数创建一个Pinia实例,并通过inject注入到组件中。然后就可以通过store来获取状态和操作状态了。下面是一个例子: ``` <template> <div> <p>{{ count }}</p> <button @click="increment">+1</button> </div> </template> <script> import { defineComponent, inject } from 'vue' import { useCounterStore } from './store' export default defineComponent({ setup() { const store = useCounterStore() const count = computed(() => store.count) const increment = () => { store.increment() } return { count, increment } } }) </script> ``` 这个例子中,我们通过useCounterStore函数来获取useCounterStore实例,并且通过computed函数来获取count的。然后我们在increment函数中调用store的increment方法。 4. 相关问题: 1. Vue3 Pinia与Vuex有什么区别? 2. 如何在多个组件之间共享状态? 3. Vue3 Pinia如何处理异步操作? 4. Vue3 Pinia如何处理模块化?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值