Vue3中pinia用法示例

 更新时间:2023年07月31日 11:19:18   作者:一花一world  
这篇文章主要介绍了Vue3中使用pinia,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在Vue 3中使用Pinia,您需要按照以下步骤进行设置:

1.安装Pinia:

npm install pinia

2.创建和配置Pinia存储:

// main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')

3.在应用中创建和使用存储:

// store.js
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0
  }),
  actions: {
    increment() {
      this.count++
    },
    decrement() {
      this.count--
    }
  }
})

4.在组件中使用存储:

<!-- Counter.vue -->
<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
    <button @click="decrement">Decrement</button>
  </div>
</template>
<script>
import { defineComponent } from 'vue'
import { useCounterStore } from './store'
export default defineComponent({
  setup() {
    const counterStore = useCounterStore()
    return {
      count: counterStore.count,
      increment: counterStore.increment,
      decrement: counterStore.decrement
    }
  }
})
</script>

在上面的示例中,我们使用Pinia来创建了一个名为"counter"的存储,并在组件中使用useCounterStore()来访问该存储。通过在组件中使用setup()函数,我们可以将存储中的状态和操作绑定到组件的模板中。

这就是在Vue 3中使用Pinia的基本流程。您可以根据自己的需要创建和配置更多的存储,并在组件中使用它们。

组件使用

在Vue 3中,使用组件需要经过以下步骤:

1.创建组件:

<!-- MyComponent.vue -->
<template>
  <div>
    <h1>{{ title }}</h1>
    <p>{{ message }}</p>
  </div>
</template>
<script>
import { defineComponent } from 'vue'
export default defineComponent({
  props: {
    title: {
      type: String,
      required: true
    },
    message: {
      type: String,
      default: ''
    }
  }
})
</script>

在上面的示例中,我们创建了一个名为MyComponent的组件,它接受两个属性:titlemessage

2.在父组件中使用组件:

<!-- ParentComponent.vue -->
<template>
  <div>
    <my-component title="Hello" message="Welcome to my app!" />
  </div>
</template>
<script>
import { defineComponent } from 'vue'
import MyComponent from './MyComponent.vue'
export default defineComponent({
  components: {
    MyComponent
  }
})
</script>

在上面的示例中,我们在ParentComponent中使用MyComponent组件,并通过属性传递了titlemessage的值。

3.渲染组件:

<!-- App.vue -->
<template>
  <div>
    <parent-component />
  </div>
</template>
<script>
import { defineComponent } from 'vue'
import ParentComponent from './ParentComponent.vue'
export default defineComponent({
  components: {
    ParentComponent
  }
})
</script>

在上面的示例中,我们在App组件中渲染了ParentComponent组件。

通过以上步骤,您可以在Vue 3中创建和使用组件。您可以根据需要在组件中定义属性、方法和生命周期钩子等。

store.$reset()

在Pinia中,store.$reset()是一个用于重置存储状态的方法。它将会重置存储的状态为初始值,并且会触发订阅该存储的组件重新渲染。

要使用$reset()方法,您需要先获取到存储实例,然后调用该方法。以下是一个示例:

import { useCounterStore } from './store'
// 获取存储实例
const counterStore = useCounterStore()
// 调用 $reset() 方法来重置存储状态
counterStore.$reset()

在上面的示例中,我们首先通过useCounterStore()获取了counter存储的实例,然后调用$reset()方法来重置存储的状态。

请注意,$reset()方法会重置存储的状态,但不会影响存储的其他配置,例如actionsgetters等。如果您想要重置整个存储(包括配置),可以考虑重新创建存储实例。

Getter

在Pinia中,您可以使用getters来获取存储状态的派生值。getters是存储的一种特殊属性,它可以根据存储状态的值进行计算,返回一个派生的值。

以下是一个使用getters的示例:

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

在上面的示例中,我们定义了一个名为doubleCountgetter,它返回存储状态count的两倍。通过在getters对象中定义doubleCount函数,我们可以在组件中通过$store.doubleCount来访问这个派生值。

以下是在组件中使用getter的示例:

<template>
  <div>
    <p>Count: {{ $store.count }}</p>
    <p>Double Count: {{ $store.doubleCount }}</p>
    <button @click="$store.increment()">Increment</button>
  </div>
</template>
<script>
import { defineComponent } from 'vue'
import { useCounterStore } from './store'
export default defineComponent({
  setup() {
    const store = useCounterStore()
    return { $store: store }
  }
})
</script>

在上面的示例中,我们在模板中使用了$store.doubleCount来获取doubleCount的值,并在按钮的点击事件中调用了$store.increment()来增加count的值。

Actions

在Pinia中,actions用于定义存储的操作。actions是存储的一种特殊属性,它包含一组可以在组件中调用的方法。

以下是一个使用actions的示例:

import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0
  }),
  getters: {
    doubleCount: (state) => {
      return state.count * 2
    }
  },
  actions: {
    increment() {
      this.count++
    },
    decrement() {
      this.count--
    },
    reset() {
      this.count = 0
    }
  }
})

在上面的示例中,我们定义了三个actionsincrementdecrementreset。这些方法可以在组件中通过$store.increment()$store.decrement()$store.reset()来调用。

以下是在组件中使用actions的示例:

<template>
  <div>
    <p>Count: {{ $store.count }}</p>
    <p>Double Count: {{ $store.doubleCount }}</p>
    <button @click="$store.increment()">Increment</button>
    <button @click="$store.decrement()">Decrement</button>
    <button @click="$store.reset()">Reset</button>
  </div>
</template>
<script>
import { defineComponent } from 'vue'
import { useCounterStore } from './store'
export default defineComponent({
  setup() {
    const store = useCounterStore()
    return { $store: store }
  }
})
</script>

在上面的示例中,我们在模板中使用了$store.count$store.doubleCount来获取存储状态和派生值的值,并在按钮的点击事件中调用了$store.increment()$store.decrement()$store.reset()来执行相应的操作。

到此这篇关于Vue3中pinia用法示例的文章就介绍到这了,更多相关Vue3使用pinia内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue实现tab切换的放大镜效果

    vue实现tab切换的放大镜效果

    这篇文章主要为大家详细介绍了vue实现tab切换的放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue全局混入之状态判断是否执行点击

    vue全局混入之状态判断是否执行点击

    这篇文章主要介绍了vue全局混入之状态判断是否执行点击方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 详解关于Vue2.0路由开启keep-alive时需要注意的地方

    详解关于Vue2.0路由开启keep-alive时需要注意的地方

    这篇文章主要介绍了关于Vue2.0路由开启keep-alive时需要注意的地方,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 详解vue中使用express+fetch获取本地json文件

    详解vue中使用express+fetch获取本地json文件

    本篇文章主要介绍了详解vue中使用express+fetch获取本地json文件,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • VUE+SpringBoot实现分页功能

    VUE+SpringBoot实现分页功能

    这篇文章主要为大家详细介绍了VUE+SpringBoot实现分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Vue生命周期示例详解

    Vue生命周期示例详解

    这篇文章主要为大家详细介绍了Vue生命周期的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • vxe-table 实现 excel 选择一个单元格拖拽自动复制新的单元格(示例代码)

    vxe-table 实现 excel 选择一个单元格拖拽自动复制新的单元格(示例代码)

    vxe-table是一款强大的表格组件,支持Excel风格的操作,通过鼠标右下角的扩展按钮,用户可以拖拽选择单元格并自动复制内容到扩展区域的所有单元格中,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-01-01
  • vue中使用axios请求post接口发送两次

    vue中使用axios请求post接口发送两次

    这篇文章主要为大家介绍了vue中使用axios请求post接口,请求会发送两次原因解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • vue el-form一行里面放置多个el-form-item的实现

    vue el-form一行里面放置多个el-form-item的实现

    本文主要介绍了vue el-form一行里面放置多个el-form-item的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 在iview+vue项目中使用自定义icon图标方式

    在iview+vue项目中使用自定义icon图标方式

    这篇文章主要介绍了在iview+vue项目中使用自定义icon图标方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04

最新评论