首页 > 其他分享 >创建定义store并使用组合式api、选项式api

创建定义store并使用组合式api、选项式api

时间:2023-08-13 14:34:45浏览次数:37  
标签:组合式 const 定义 defineStore api store

  • 在项目根目录创建store文件夹(此步骤和vuex相同)

  • 在步骤一的store文件夹下根据不同的用途场景创建单独的store文件(等同于vuex中分模块)、

定义store基本步骤

步骤

  1. 导入defineStore()方法:import {defineStore} from 'pinia'
  2. 使用defineStore定义store并导出
import { defineStore } from 'pinia'

// 你可以对 `defineStore()` 的返回值进行任意命名,但最好使用 store 的名字,同时以use开头且以Store结尾。(比如 `useUserStore`,`useCartStore`)

// 第一个参数是你的应用中 Store 的唯一ID(因为pinia并没有vuex中模块的概念,每个文件就是单独一个模块了,所以id必唯一)。

// defineStore() 的第二个参数可接受两类值:Setup 函数或 Option 对象。
//   如果是一个对象,则可以使用选项式api来定义store(旧应用渐进式升级、vue2可使用这种方式,vue3建议用下面的组合式api方式)
//   如果是一个箭头函数,则可以使用组合式api来定义store,(推荐,因为vue3用的就是组合式api比较多。)
export const useAlertsStore = defineStore('alerts', {
  // 其他配置...
})

定义store实例(组合式api)

定义一个用户相关的状态管理→store/user.js:

import {defineStore} from 'pinia'
import {ref} from 'vue'

// 你可以对 `defineStore()` 的返回值进行任意命名,但最好使用 store 的名字,
// 同时以 `use` 开头且以 `Store` 结尾。(比如 `useUserStore`,`useCartStore`,`useProductStore`)
// 第一个参数是你的应用中 Store 的唯一ID(因为pinia并没有vuex中模块的概念,每个文件就是单独一个模块了,所以id必唯一)。
// 第二个参数如果是一个对象,则可以使用选项式api来定义store(旧应用渐进式升级、vue2可使用这种方式,vue3建议用下面的组合式api方式)
//          如果是一个箭头函数,则可以使用组合式api来定义store,(推荐,因为vue3用的就是组合式api比较多。)
export const useUserStore = defineStore('user', {
  // 选项式 store的使用方法:

  // state和vuex不太一样,必须要返回一个函数,vuex中是一个对象属性。
  state: () => {
    return {
      count: ref(12),
      num: ref(100)
    }
  },
  // 定义getters方式类似vuex
  getters: {
    doubleCount: (state) => {
      return state.count * 2
    }
  },
  // 也是类似vuex
  actions: {
    increCount() {
      // pinia中因为action相当于组合了mutiation和actions,所以可以直接修改state中的数据。
      // 在选项式api中actions访问state中的数据,是用this来直接访问的。
      this.count++
    }
  }
})

定义store实例(选项式api)

// 使用类似vue3中的组合式api方式定义store
export const useUserStore2 = defineStore('user2', () => {

  // 直接定义变量就是等同于定义state,比如这里用ref()定义响应式数据
  const money = ref(888)

  // 定义方法就是等同于定义actions
  const increMoney = (value) => {
    money.value += value
  }

  // 定义computed计算属性就是等同于定义getters
  const doubleMoney = computed(()=>{
    return money.value * 2
  })

  // 使用选项式api,必须要返回,否则外面用不到。
  return {
    money,
    increMoney,
    doubleMoney
  }
})

在vue中使用store

  1. 导入自己编写的store
// 1. 导入store
import {useUserStore, useUserStore2} from './store/user';
  1. 实例化并用变量接收
// 2. 创建store实例
const userStore = useUserStore()

const userStore2 = useUserStore2()

  1. 引用store变量中的state、getters、actions
<template>
  <div>hello pinia</div>
  <!-- 引用store中的state、actions、getters -->
  <p>userStore中的数据:{{ userStore.count }}</p>
  <p>userStore中的数据:{{ userStore.doubleCount }}</p>
  <button @click="userStore.increCount">自增+1</button>
  
  <hr>
  <p>userStore2中的数据:{{ userStore2.money }}</p>
  <p>userStore2中的数据:{{ userStore2.doubleMoney }}</p>
  <button @click="userStore2.increMoney(10)">钱+10</button>
  
</template>

标签:组合式,const,定义,defineStore,api,store
From: https://www.cnblogs.com/juelian/p/17626540.html

相关文章

  • storeToRefs()的作用和使用
    store是一个用reactive包装的对象,这意味着不需要在getters后面写.value,就像setup中的props一样,如果你写了,我们也不能解构它:<scriptsetup>conststore=useCounterStore()//❌这将不起作用,因为它破坏了响应性//这就和直接解构`props`一样const{name,doubl......
  • 什么是 SAP Fiori Elements 的 extensionAPI
    在SAPFioriElements中,"extensionAPI"是一种用于自定义和扩展FioriElements应用的强大工具。它提供了一组API(应用程序编程接口),允许开发人员通过代码的方式对FioriElements应用进行定制和增强。借助extensionAPI,开发人员可以在不影响标准FioriElements功能的基础上,......
  • n、Appium_Python_Api
    一、Appium_Python_Api方法参考博客:https://blog.csdn.net/ezreal_tao/article/details/80911950https://cloud.tencent.com/developer/article/1569596contextscontexts(self):Returnsthecontextswithinthecurrentsession.返回当前会话中的上下文,使用后可以识别H5......
  • VUE3_API 风格
    选项式API(OptionsAPI)使用选项式API,我们可以用包含多个选项的对象来描述组件的逻辑,例如 data、methods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例<script>exportdefault{//data()返回的属性将会成为响应式的状态/......
  • 组合式api的使用方式
    方式一:通过setup选项<script>exportdefault{setup(){//提供数据//提供函数//提供计算属性等等.....}}</script>例子:<script>exportdefault{setup(){console.log('setup......')//直接提供数......
  • 组合式api-通过reactive和ref提供响应式数据
    在setup中如果是直接定义遍历数据并不是响应式数据,和vue2中的data选项提供的数据不一样,vue2的data中返回的数据全部都是响应式数据。<scriptsetup>//这样提供的数据并不是响应式数据,和vue2中的data选项提供的数据并不是一样。letstate=888constgetState=()=>{......
  • vue3组合式api生命周期
    生命周期钩子函数Vue3:https://cn.vuejs.org/api/composition-api-lifecycle.htmlVue2:https://v2.cn.vuejs.org/v2/api/#选项-生命周期钩子Vue2(选项式)Vue3(选项式)Vue3(组合式Api)beforeCreate()beforeCreate()created()created()setup()beforeMount()bef......
  • 组合式api-侦听器watch的语法
    和vue2对比,也是语法上稍有不同。监听单个数据对象<scriptsetup>import{ref,watch}from"vue";constcount=ref(100)//语法:watch(响应式数据对象,(newVal,oldVal)=>{业务处理...}//只监听单个数据//watch(count,(newValue,oldValue)=>{//console.l......
  • 组合式api-计算属性computed的使用
    计算属性在vue3中和vue2的思想概念都是一样,唯一区别就是在使用组合式api时候的语法稍有不同。使用步骤:导入computed函数import{computed}from'vue'使用computed函数<scriptsetup>import{computed,ref}from"vue";constarr=ref([1,2,3,4,5,6,7,8,9,......
  • 组合式api-ref引用子组件、dom元素, defineExpose的使用
    和vue2一样,我们有时候希望父组件能够调用子组件中的方法、属性。那么就要用到ref。然后你会发现,根本调用不了子组件中的方法"sonSayHi",如下图:原因:使用......