当前位置: 首页 > news >正文

Zustand入门及使用教程(二--更新状态)

扁平更新

使用新状态调用的 set 函数,它将与存储中的现有状态进行浅层合并。

import { create } from 'zustand'type State = {firstName: stringlastName: string
}type Action = {updateFirstName: (firstName: State['firstName']) => voidupdateLastName: (lastName: State['lastName']) => void
}// Create your store, which includes both state and (optionally) actions
const usePersonStore = create<State & Action>((set) => ({firstName: '',lastName: '',updateFirstName: (firstName) => set(() => ({ firstName: firstName })),updateLastName: (lastName) => set(() => ({ lastName: lastName })),
}))// In consuming app
function App() {// "select" the needed state and actions, in this case, the firstName value// and the action updateFirstNameconst firstName = usePersonStore((state) => state.firstName)const updateFirstName = usePersonStore((state) => state.updateFirstName)return (<main><label>First name<input// Update the "firstName" stateonChange={(e) => updateFirstName(e.currentTarget.value)}value={firstName}/></label><p>Hello, <strong>{firstName}!</strong></p></main>)
}

不可变状态和合并

与 React 的 useState一样,需要不可变地更新状态。

import { create } from 'zustand'const useCountStore = create((set) => ({count: 0,inc: () => set((state) => ({ count: state.count + 1 })),
}))

set 函数用于更新存储中的状态。因为状态是不可变的,所以应该是:

set((state) => ({ ...state, count: state.count + 1 }))

但是,由于这是一种常见的模式,set 实际上合并了状态,我们可以跳过 ...state 部分:

set((state) => ({ count: state.count + 1 }))

嵌套对象

set 函数仅在一个级别合并状态。如果你有一个嵌套对象,则需要明确合并他们。将使用扩展运算符模式:

import { create } from 'zustand'const useCountStore = create((set) => ({nested: { count: 0 },inc: () =>set((state) => ({nested: { ...state.nested, count: state.nested.count + 1 },})),
}))

对于复杂用例,考虑使用一些有助于不可变更新的库。参考 更新嵌套状态对象值

替换标志

要禁止合并行为,可以为 set 指定一个 replace 布尔值:

set((state) => newState, true)

文章转载自:

http://MjRtPBtH.ynstj.cn
http://goH4y6zW.ynstj.cn
http://afMyf9JC.ynstj.cn
http://MX5RAZPP.ynstj.cn
http://k8TG6TQg.ynstj.cn
http://JBIaPUGB.ynstj.cn
http://Ghrtsxu3.ynstj.cn
http://QzCSP1zQ.ynstj.cn
http://VnSw05MW.ynstj.cn
http://C3SZ4bLP.ynstj.cn
http://FOjqhIVV.ynstj.cn
http://lb6UX3n4.ynstj.cn
http://j1vTkA23.ynstj.cn
http://sJyfyVEM.ynstj.cn
http://PhcqNYGl.ynstj.cn
http://WVr575qN.ynstj.cn
http://q492sAfT.ynstj.cn
http://L7IrOW3U.ynstj.cn
http://MKuMXliV.ynstj.cn
http://dftyOIXT.ynstj.cn
http://YuiY32zj.ynstj.cn
http://isLJcA6E.ynstj.cn
http://uCVOWRPk.ynstj.cn
http://UF5YodXX.ynstj.cn
http://i0FayHjR.ynstj.cn
http://jTYdIzVQ.ynstj.cn
http://KF3acZDM.ynstj.cn
http://rX4XsgMs.ynstj.cn
http://s3IflWwK.ynstj.cn
http://LIKR1e1o.ynstj.cn
http://www.dtcms.com/a/388515.html

相关文章:

  • Matplotlib统计图:绘制精美的直方图、条形图与箱线图
  • 在el-table-column上过滤数据,进行格式化处理
  • 记一次golang结合前端的axios、uniapp进行预签名分片上传遇到403签名错误踩坑
  • 十一章 无界面压测
  • 多色印刷机的高精度同步控制:EtherCAT与EtherNet/IP的集成应用
  • 【随笔】【蓝屏】DMA错误
  • Coze源码分析-资源库-创建工作流-后端源码-IDL/API/应用/领域层
  • 5 分钟将网站打包成 APP:高效实现方案
  • 物联网智能网关核心功能实现:解析西门子1500 PLC的MQTT通信配置全流程
  • 新国标电动自行车实施,BMS 静电浪涌风险与对策
  • 【Python】Python文件操作
  • C#如何使用ApiPost接口,将数据显示在unity面板
  • 零基础从头教学Linux(Day 36)
  • 深度学习(2)
  • 火山 17 声音回调
  • Flash芯片的VCC上电到可操作时间过长
  • CSP-S——各算法可以实现的问题
  • 第十七章 Arm C1-Premium性能监控单元(PMU)事件详解
  • vue锚点导航
  • 软件体系结构——后端三层架构
  • Nmap 端口扫描
  • 关于青春的沉浸式回忆录-《学生时代》评测
  • 深入理解虚拟 DOM(VDOM):原理、优势与应用
  • React 18笔记
  • 模块化演进史:从 IIFE / CommonJS / AMD 到 ES Modules(含 Tree Shaking 原理)
  • Python+PyQt构建自动化定时任务执行工具
  • 前端如何终止请求
  • Ubuntu 系统 MySQL 全面管理指南(认证、用户、密码、服务及安全)
  • 《UE5_C++多人TPS完整教程》学习笔记53 ——《P54 转身(Turning in Place)》
  • 【Cyansdk 插件详细介绍文档】