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>
相关推荐
GISer_Jing2 分钟前
[总结篇]个人网站
前端·javascript
ss.li4 分钟前
TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
javascript·人工智能·python
疯狂的沙粒24 分钟前
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
前端·uni-app·html
程序员秘密基地25 分钟前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
小妖66628 分钟前
html 滚动条滚动过快会留下边框线
前端·html
heroboyluck42 分钟前
Svelte 核心语法详解:Vue/React 开发者如何快速上手?
前端·svelte
海的诗篇_43 分钟前
前端开发面试题总结-JavaScript篇(二)
开发语言·前端·javascript·typescript
琹箐1 小时前
ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
前端·javascript·anti-design-vue
程序员-小李1 小时前
VuePress完美整合Toast消息提示
前端·javascript·vue.js
Uyker2 小时前
从零开始制作小程序简单概述
前端·微信小程序·小程序