位置: IT常识 - 正文

Pinia(二)了解和使用Store

编辑:rootadmin
Pinia(二)了解和使用Store StoreStore 是保存状态(state)和业务逻辑的实体, store 不应该与我们的组件绑定. 换句话说, store 就是全局状态.store 有三个关键概念, 分别是 state, getters 和 actions, 这与 Vue 组件中的 data, computed 和 methods 是相对应的概念.定义 store通过 defineStore 函数定义 store.defineStore 接收两个参数

id: 唯一的标识, string 类型. Pinia 使用 id 与开发者工具建立联系.第二个参数可以是一个函数, 也可以是一个对象.defineStore 返回一个函数, 一般约定将返回值命名为 use....第二个参数: 对象类型如果要传入对象类型作为第二个参数, 在对象中可以配置state: 状态, 即数据. 📕注意 state 是一个函数, 函数的返回值才是真正定义的数据getters: 计算属性actions: 修改状态的方法export const useCounterStore = defineStore('counter', { state: () => { return { count: 0, } }, getters: { doubleCount: (state) => { return state.count * 2; } }, actions: { increment(a: number) { this.count += a } }})第二个参数: 函数类型在函数中可以通过 ref/reactive 定义响应式数据, 通过 computed 和 watch 定义计算属性和侦听器, 再定义一些修改数据的方法, 并通过返回对象的形式将其中一些数据暴露出去.import { defineStore } from 'pinia';import { ref } from 'vue';export const useNameStore = defineStore('name', () => { const name = ref('tom'); function setName(newName: string) { name.value = newName; } return { name, setName }});使用 store

推荐整理分享Pinia(二)了解和使用Store,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

无论定义 store 时传入的参数是对象类型还是函数类型, 调用方法一致的. 我们需要在 setup() 函数或 <script setup> 中使用

import { useCounterStore } from '../store';import { useNameStore } from '../store/index2'// 第一个store: countconst store = useCounterStore();function countPlus() { store.increment(1);}// 第二个store: nameconst name1 = useNameStore();function updateName1() { name1.setName('jerry1' + Math.random())}

📕store 实例并不会被创建直到调用 useNameStore()

可以直接通过 store. 的方式访问 store 的 state, 和

<h2>{{store.count}}</h2><button @click="countPlus">countPlus</button><hr><h2>{{ name1.name }}</h2><button @click="updateName1">updateName1</button>

Pinia(二)了解和使用Store

📕注意修改数据时, 页面并没有失去响应式, 调用 isProxy 可以看出 use... 返回的结果统统都是响应式的数据

失去响应式的陷阱

如果解构 use.. 的返回值, 那么将失去响应式❗❗❗❗❗const { name, setName } = useNameStore();function updateName() { setName('jerry' + Math.random());}<h2>{{ name }}</h2><button @click="updateName">updateName</button>

storeToRefs

为了从 store 中解构出属性并且保持其响应式, 需要调用 storeToRefs. storeToRefs 将为每个响应式数据创建 ref.先看传入函数类型的 storeconst nameStore2 = storeToRefs(useNameStore());console.log('nameStore2', nameStore2)

📕注意返回的 storeToRefs 返回的对象中只有 name, 而没有 setName, 因此完整的写法应该是

const nameStore = useNameStore();const { setName } = nameStore;const { name } = storeToRefs(useNameStore());再看传入对象类型的 storeconst store = useCounterStore();const countStore2 = storeToRefs(store)console.log('countStore2', countStore2);

📕只有 state 和 getters, 没有 actions, 因此要从 useCounterStore() 的返回值中解构出 actions 中的方法

const store = useCounterStore();const { count, doubleCount } = storeToRefs(store);const { increment } = store;function countPlus1() { increment(2);}

感谢你看到这里😀

本文链接地址:https://www.jiuchutong.com/zhishi/293077.html 转载请保留说明!

上一篇:前端401错误 & 解决方法:响应拦截器(前端报405错误)

下一篇:HTML + CSS + JavaScript 实现注册页面信息验证 详细教程(表单验证)(htmlcssjavascript网页制作)

  • 个人所得税申诉已受理多久出结果
  • 收到待报解预算收入怎么查退的什么税
  • 报销金额限制多少
  • 投资管理公司成立的条件
  • 国家电子产品投诉电话
  • 个税申报了还要扣钱吗
  • 申报后发现成本算错了
  • 出纳工作的七大技巧
  • 员工出差住宿费计入什么科目
  • 用于研发的设备会计分录
  • 企业收到投资者以外币投入的资本应当采用什么折算
  • 企业贷款银行罚息可以减免吗?
  • 结算纪律与法律责任表格
  • 海关进口增值税发票抵扣期限
  • 股票红利税如何征收
  • 反写是清卡的意思吗
  • 对方发票丢失开什么证明
  • 购设备发票只开来一部分怎么入账?
  • 初级考试备考计划
  • 固定资产清理账户结构
  • 报销时可以一个人报销吗
  • 含税房租
  • 查补的增值税如何申报
  • 发出商品发生损失
  • 鸿蒙工具栏在哪里
  • 直接人工成本的计算
  • 投资收益或亏损影响营业利润吗
  • 物权请求权如何行使
  • php怎么学
  • PHP:session_encode()的用法_Session函数
  • 红字发票只能一张一张开吗
  • 非经营业务
  • 工程施工暂估的成本的依据
  • 最贵的耳机排名
  • PHP:mcrypt_get_block_size()的用法_Mcrypt函数
  • 简述php的概念和特点
  • k8s安装步骤
  • css给div加边框
  • 云质信息
  • php二维数组foreach
  • php 引用
  • 收到合同预付款怎么处理
  • linux lab安装
  • python捕获异常继续执行
  • c语言strncat函数用法
  • 应收保费核算什么业务
  • 计提应收账款坏账准备属于谨慎性吗
  • 社保工伤保险可以退吗
  • 合并资产负债表图片
  • sqlserver定时执行sql
  • sqlserver2008数据迁移
  • 小规模结转成本怎么计算
  • 提取备用金如何填写现金日记账
  • 以银行存款支付固定资产修理费
  • 哪些合同需要缴税
  • 自己开发建造的房屋
  • 企业银行存款的流动性强于存货
  • 本月没有销售怎么做账
  • 现汇账户和现钞账户
  • 新设企业如何建账
  • mysql重置binlog
  • 自己动手制作
  • ubuntu更新设置在哪
  • 苹果电脑dock栏是什么意思
  • 开启linux系统路由转发功能的语句
  • centos 操作日志
  • win7如何查看电脑主板型号
  • javascript+HTML5 Canvas绘制转盘抽奖
  • js数组随机抽奖
  • node.js中的http.response.removeHeader方法使用说明
  • linux小技巧
  • vscode 远程调试jni
  • 实现 java
  • jquery valid()
  • javascript产生随机数
  • js实现功能
  • python运行flask
  • 青岛市地方税务局网上办税厅
  • 审计报告的数据真实性
  • 环保税2018年开征文件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设