创建定义store并使用组合式api、选项式api
在项目根目录创建store文件夹(此步骤和vuex相同)
在步骤一的store文件夹下根据不同的用途场景创建单独的store文件(等同于vuex中分模块)、

定义store基本步骤
步骤
- 导入defineStore()方法:
import {defineStore} from 'pinia' - 使用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
- 导入自己编写的store
// 1. 导入store
import {useUserStore, useUserStore2} from './store/user';
- 实例化并用变量接收
// 2. 创建store实例
const userStore = useUserStore()
const userStore2 = useUserStore2()
- 引用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>
创建定义store并使用组合式api、选项式api的更多相关文章
- 通过beego快速创建一个Restful风格API项目及API文档自动化
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...
- SharePoint在管理中心创建Secure Store
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012025054/article/details/35780063 SharePoint在管理中心 ...
- 通过beego快速创建一个Restful风格API项目及API文档自动化(转)
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...
- 创建基于OData的Web API - Knowledge Builder API, Part IV: Write Controller
基于上一篇<创建基于OData的Web API - Knowledge Builder API, Part III:Write Model and Controller>,新创建的ODat ...
- ASP.NET Core Web API 开发-RESTful API实现
ASP.NET Core Web API 开发-RESTful API实现 REST 介绍: 符合REST设计风格的Web API称为RESTful API. 具象状态传输(英文:Representa ...
- Java8 流式 API(`java.util.stream`)
熟悉 ES6 的开发者,肯定对数组的一些方法不是很陌生:map.filter 等.在对一组对象进行统一操作时,利用这些方法写出来的代码比常规的迭代代码更加的简练.在 C♯ 中,有 LINQ 来实现.那 ...
- NET Web API和Web API Client Gen使Angular 2应用程序
使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效 本文介绍“ 为ASP.NET Web API生成TypeScript客户端API ” ...
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- lumen 构建api(dingo api)
什么是 API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...
- HTML5之本地文件系统API - File System API
HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...
随机推荐
- Python隔离环境的搭建
在nodejs中,我们可以指定扩展安装的路径,那么在python中,我们是不是也可以这么做呢? 当然可以,我们只需要安装一个扩展virtualenv或者virtual wrapper就可以实现环境的隔 ...
- 在Vue2和Vue3中JSX的使用集锦
Vue2安装JSX支持 有时候,我们使用渲染函数(render function)来抽象组件,而渲染函数使用Vue的h函数来编写Dom元素相对template语法差别较大,体验不佳,这个时候就派 JS ...
- Denpendcy Injection 8.0新功能——KeyedService
Denpendcy Injection 8.0新功能--KeyedService 本文只介绍 .NET Denpendcy Injection 8.0新功能--KeyedService,假定读者已熟练 ...
- Abp vNext 模块加载机制
文章目录 生命周期 PreConfigureServices 添加依赖注入或者其它配置之前 ConfigureServices 添加依赖注入或者其它配置 PostConfigureServices 添 ...
- Redis面试——Redis面试精华知识
从:Redis 使用场景与介绍 -> 数据结构与简单使用 -> 小功能大用处 -> 持久化.主从同步与缓存设计 -> 知识拓展 ,并且分析典型场景下常见的问题,并结合实战演练, ...
- C# 12 中的新增功能
新的 C# 12 功能在预览版中已经引入. 您可以使用最新的 Visual Studio 预览版或最新的 .NET 8 预览版 SDK 来尝试这些功能.以下是一些新引入的功能: 主构造函数 集合表达式 ...
- [ABC310D] Peaceful Teams 题解
Peaceful Teams 题目大意 将 \(n\) 个人分成 \(T\) 组,要求每组不能包含敌对的人,问有多少种分法. 思路分析 注意到 \(n,T\) 均很小,考虑爆搜. 注意到直接枚举会枚举 ...
- 【Unity3D】UI Toolkit样式选择器
1 前言 UI Toolkit简介 中介绍了样式属性,UI Toolkit容器 和 UI Toolkit元素 中介绍了容器和元素,本文将介绍样式选择器(Selector),主要包含样式类选择器(C ...
- kafka和zookeeper安装
一.Kafka简介 Kafka 被称为下一代分布式消息系统,是非营利性组织ASF(Apache Software Foundation,简称为ASF)基金会中的一个开源项目,比如HTTP Server ...
- 企业FTP搭建教程
安装Vsftpd 提前关闭selinux 和firewalld防火墙 安装vsftp软件包: yum install -y vsftpd* 启动vsftp服务器: systemctl start vs ...