pinia在vue3中的使用

下载pinia

复制代码
   yarn add pinia

导入pinia

javascript 复制代码
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const pinia = createPinia()
const app = createApp(App)

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

定义pinia

复制代码
  ### option方式

  1. Vue的选项式 API 类似,我们也可以传入一个带有state、actions与getters属性的Option对象。  
     state是store的数据 (data),getters是store的计算属性(computed),而actions则是方法(methods)。

     ```javascript
     export const useCounterStore = defineStore('counter', {
       state: () => ({ count: 0, name: 'Eduardo' }),
       getters: {
         doubleCount: (state) => state.count * 2,
       },
       actions: {
         increment() {
           this.count++
         },
       },
     })
     ```
复制代码
  ### setup方式

  1. ref()就是state属性,computed()就是getters,function()就是actions。

     ```javascript
     export const useCounterStore = defineStore('counter', () => {
       const count = ref(0)
       const doubleCount = computed(() => count.value * 2)
       function increment() {
         count.value++
       }

       return { count, doubleCount, increment }
     })
     ```

使用store

  1. vue3使用pinia,这里使用了<script setup>

    javascript 复制代码
    <script setup>
    import { useCounterStore } from '@/stores/counter'
    // 可以在组件中的任意位置访问 `store` 变量 ✨
    const store = useCounterStore()
    </script>
  2. 详细使用

    javascript 复制代码
    <script setup>
    import { useCounterStore } from '@/stores/counter'
    import { computed } from 'vue'
    
    const store = useCounterStore()
    // ❌ 这将不起作用,因为它破坏了响应性
    // 这就和直接解构 `props` 一样
    const { name, doubleCount } = store
    name // 将始终是 "Eduardo"
    doubleCount // 将始终是 0
    setTimeout(() => {
      store.increment()
    }, 1000)
    // ✅ 这样写是响应式的
    // 💡 当然你也可以直接使用 `store.doubleCount`
    const doubleValue = computed(() => store.doubleCount)
    </script>
相关推荐
程序员敲代码吗几秒前
MDN全面接入Deno兼容性数据:现代Web开发的“一张图”方案
前端
0思必得02 分钟前
[Web自动化] Selenium截图
前端·爬虫·python·selenium·自动化
tb_first1 小时前
SSM速通2
java·javascript·后端
疯子****1 小时前
【无标题】
前端·clawdbot
RichardLau_Cx1 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
不爱写程序的东方不败2 小时前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
yangzheui2 小时前
【VUE2转VUE3学习笔记】-Day1:模板语法
vue.js·笔记·学习
晚霞的不甘2 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
黎子越2 小时前
python相关练习
java·前端·python
摘星编程3 小时前
用React Native开发OpenHarmony应用:StickyHeader粘性标题
javascript·react native·react.js