最简单的状态教程

最简单的状态教程

zustand 是一个小型、快速且可扩展的 react 状态管理库,可作为 redux 等更复杂解决方案的替代方案。 zustand 获得如此大关注的主要原因是与 redux 相比,它的体积小且语法简单。

了解 zustand 设置

首先,如果您还没有安装 zustand 和 typescript,则需要安装。

npm install zustand'or'yarn add zustand

登录后复制

zustand 提供了一个创建函数来定义您的商店。让我们来看一个存储和操作计数值的基本示例。

让我们创建一个名为 store.ts 的文件,其中我们有一个自定义挂钩 usecounterstore():

import { create } from "zustand"type counterstore = {    count: number    increment: () => void    resetcount: () => void}export const usecounterstore = create((set) => ({    count: 0    increment: () => set((state) => ({ count: state.count + 1 })),    resetcount: () => set({ count: 0 })}))

登录后复制

在此示例中:

计数是一个状态。

increasecount和resetcount是修改状态的操作。

set是zustand提供的更新商店的功能。

在 react 组件中使用 store

import react from 'react'import { usecounterstore } from './store'const counter: react.fc = () => {  const count = usecounterstore((state) => state.count) // get count from the store  const increment = usecounterstore((state) => state.increment) // get the action  return (    

{count}

)}export default counter;

登录后复制

这里,counter 是一个 react 组件。如您所见,usecounterstate() 用于访问计数和增量。

您可以解构状态,而不是像下面这样直接获取它们:

const {count, increment} = usecounterstore((state) => state)

登录后复制

但是这种方法降低了性能。因此,最佳实践是直接访问状态,就像之前显示的那样。

异步操作

在 zustand 中进行异步操作或向服务器调用 api 请求也非常简单。在这里,以下代码说明了一切:

export const usecounterstore = create((set) => ({    count: 0    increment: () => set((state) => ({ count: state.count + 1 })),    incrementasync: async () => {        await new promise((resolve) => settimeout(resolve, 1000))        set((state) => ({ count: state.count + 1 }))    },    resetcount: () => set({ count: 0 })}))

登录后复制

它看起来不像 javascript 中的通用异步函数吗?首先它运行异步代码,然后用给定值设置状态。

现在,让我们看看如何在 react 组件上使用它:

const othercomponent = ({ count }: { count: number }) => {  const incrementasync = usecounterstore((state) => state.incrementasync)  return (    
{count}
)}

登录后复制

如何访问react组件外部的状态

到目前为止,您仅访问了 react 组件内的状态。但是从 react 组件外部访问状态又如何呢?是的,使用 zustand,您可以从外部 react 组件访问状态。

const getcount = () => {  const count = usecounterstore.getstate().count  console.log("count", count)}const othercomponent = ({ count }: { count: number }) => {  const incrementasync = usecounterstore((state) => state.incrementasync)  const decrement = usecounterstore((state) => state.decrement)  useeffect(() => {    getcount()  }, [])  return (    
{count}
)}

登录后复制

在这里,你可以看到 getcount() 正在通过 getstate() 访问状态

我们也可以设置计数:

const setcount = () => {  usecounterstore.setstate({ count: 10 })}

登录后复制

持久化中间件

zustand 中的持久中间件用于跨浏览器会话持久保存和补充状态,通常使用 localstoragesessionstorage。此功能允许您即使在页面重新加载后或用户关闭并重新打开浏览器时也能保持状态。以下是其工作原理和使用方法的详细说明。

persist的基本用法

以下是如何使用 persist 设置 zustand 商店:

import create from 'zustand';import { persist } from 'zustand/middleware';// Define the state and actionsinterface BearState {  bears: number;  increase: () => void;  reset: () => void;}// Create a store with persist middlewareexport const useStore = create(  persist(    (set) => ({      bears: 0,      increase: () => set((state) => ({ bears: state.bears + 1 })),      reset: () => set({ bears: 0 }),    }),    {      name: 'bear-storage', // Name of the key in localStorage    }  ));

登录后复制

状态保存在 localstorage 的“bear-storage”键下。现在,即使您刷新页面,熊的数量也会在重新加载后保持不变。

默认情况下,persist 使用 localstorage,但您可以将其更改为 sessionstorage 或任何其他存储系统。关于 zustand 中的持久状态主题,有很多内容需要讨论。您将在这篇文章之后获得有关此主题的详细教程/文章。

结论

我们都知道 redux 作为状态管理工具有多么出色。但 redux 拥有一个有点复杂且庞大的样板。这就是为什么越来越多的开发人员选择 zustand 作为他们的状态管理工具,它简单且可扩展。

但是你仍然会发现 redux 更适合用于非常复杂和嵌套的状态管理。

以上就是最简单的状态教程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2667507.html

(0)
上一篇 2025年3月7日 12:19:38
下一篇 2025年3月2日 06:29:50

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Pulsy Readme updated

    pulsy – react 的轻量级状态管理库 pulsy 是一个轻量级、灵活且易于使用的 react 状态管理库,提供持久性、中间件、记忆化、计算和组合存储、时间旅行和 devtools 集成等功能。它可以帮助您有效地管理 r…

    2025年3月7日
    200
  • js如何优化

    优化 JavaScript 性能的七个关键步骤:浏览器缓存:利用 localStorage 和 sessionStorage 存储经常访问的数据,利用服务程序缓存静态资源。代码压缩和混淆:压缩代码以减小文件大小,混淆代码以隐藏敏感信息。并行…

    2025年3月7日
    200
  • js如何存sessionid

    在 JavaScript 中存储 sessionID 有两种方法:使用 localStorage,数据持久保存,即使浏览器关闭后也不会丢失;使用 sessionStorage,数据仅在当前会话中有效,浏览器关闭后删除。 如何在 JavaSc…

    2025年3月7日
    200
  • js如何存储数据

    JavaScript 提供以下数据存储方法:内置数据类型(例如数字和字符串)对象(用于存储键值对)数组(用于存储有序元素)localStorage(永久存储,浏览器会话之间可用)sessionStorage(临时存储,仅在浏览器会话期间可用…

    2025年3月7日
    200
  • js如何收藏网页

    JavaScript 提供两种方法来收藏网页:使用 Web Storage API 存储 URL 在 localStorage 或 sessionStorage 中。使用 indexedDB 创建一个数据库来存储 URL,容量更大,功能更强…

    2025年3月7日
    200
  • js如何阻止关闭浏览器

    可以通过以下方式使用 JavaScript 阻止关闭浏览器:事件监听器:使用 beforeunload 事件监听器,当用户尝试关闭浏览器时返回字符串阻止或允许关闭。弹出窗口:使用弹出窗口,在用户尝试关闭浏览器时显示窗口阻止关闭。会话存储:使…

    2025年3月7日
    200
  • Nextjs 身份验证

    从 next.js 15 开始,处理身份验证变得更加强大和灵活,特别是凭借其先进的服务器组件、actions api 和中间件功能。在本文中,我们将探讨在 next.js 15 应用程序中实现身份验证的最佳实践,涵盖服务器组件、中间件、操作…

    2025年3月7日
    200
  • JavaScript 如何获取当前登录账号和 ID?

    如何在 javascript 中获取当前登录账号和 id javascript 无法直接从前端获取当前登录用户的账号和 id,因为这些信息通常是由服务器维护并通过 http 响应传递到客户端的。但是,可以使用一些技巧来实现类似的功能。 使用…

    2025年3月7日
    200
  • 如何在 JavaScript 中不依赖后台获取当前登录账户和 ID?

    js 如何在不依赖后台传输的情况下获取当前登录账户和 id 问题: 如何在 javascript 中获取当前登录账户和 id,无需从后台传输数据? 答: 可以使用 javascript 的 sessionstorage 来在本地存储登录信息…

    2025年3月7日
    200
  • 用户关闭页面时如何无缝保存内容?

    在用户关闭页面时无缝保存内容 在用户关闭页面时对页面内容进行保存,以防数据丢失,是一个常见的需求。与弹出确认按钮不同,本文重点介绍了如何在用户不知不觉的情况下实现保存。 保存流程 监听页面关闭事件:浏览器的 beforeunload 事件是…

    2025年3月7日
    200

发表回复

登录后才能评论