useSyncExternalStoreExports 状态源码解释

在本文中,我们将了解 zustand 如何在其[源代码]中使用 usesyncexternalstoreexports。

useSyncExternalStoreExports 状态源码解释

usesyncexternalstoreexports 是从 use-sync-external-store/shim/with-selector 导入的。 use-sync-external-store 是 react.usesyncexternalstore 的向后兼容垫片,可与任何支持 hooks 的 react 配合使用。

读到上面这句话,你可能想知道什么是usesyncexternalstore。

usesyncexternalstore

usesyncexternalstore 是一个 react hook,可让您订阅外部存储。

const snapshot = usesyncexternalstore(subscribe, getsnapshot, getserversnapshot?)

使用 usesyncexternalstore 从外部存储读取一个值,该值可以是:

在 react 之外保存状态的第三方状态管理库。

公开可变值和事件以订阅其更改的浏览器 api。

用法示例:

import { usesyncexternalstore } from 'react';import { todosstore } from './todostore.js';function todosapp() {  const todos = usesyncexternalstore(todosstore.subscribe, todosstore.getsnapshot);  // ...}

上面的例子摘自react文档。

usesyncexternalstore 在 zustand 中的用法:

zustand 在 src/traditional.ts 中使用 usesyncexternalstore。

import reactexports from 'react'// eslint-disable-next-line import/extensionsimport usesyncexternalstoreexports from 'use-sync-external-store/shim/with-selector'import { createstore } from './vanilla.ts'import type {  mutate,  statecreator,  storeapi,  storemutatoridentifier,} from './vanilla.ts'const { usedebugvalue } = reactexportsconst { usesyncexternalstorewithselector } = usesyncexternalstoreexports

usesyncexternalstorewithselector 是从 usesyncexternalstoreexports 解构而来,并在 usestorewithequalityfn 中使用。

export function useStoreWithEqualityFn(  api: ReadonlyStoreApi,  selector: (state: TState) => StateSlice = identity as any,  equalityFn?: (a: StateSlice, b: StateSlice) => boolean,) {  const slice = useSyncExternalStoreWithSelector(    api.subscribe,    api.getState,    api.getInitialState,    selector,    equalityFn,  )  useDebugValue(slice)  return slice}

usesyncexternalstorewithselector 有 api.subscribe、api.getstate、api.getinitialstate、selector 和 equalfn。

关于我们:

在 think throo,我们的使命是教授受开源项目启发的最佳实践。

通过在 next.js/react 中练习高级架构概念,将您的编码技能提高 10 倍,学习最佳实践并构建生产级项目。

我们是开源的 — https://github.com/thinkthroo/thinkthroo (请给我们一颗星!)

通过我们基于代码库架构的高级课程来提高您的团队的技能。请通过 hello@thinkthroo.com 联系我们以了解更多信息!

参考资料:

https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#l44

https://www.npmjs.com/package/use-sync-external-store

https://legacy.reactjs.org/docs/hooks-reference.html#usesyncexternalstore

https://react.dev/reference/react/usesyncexternalstore

https://github.com/reactwg/react-18/discussions/86

以上就是useSyncExternalStoreExports 状态源码解释的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:51:43
下一篇 2025年12月19日 13:51:52

相关推荐

  • 太阳之路 – 让我的标记更加迷人

    这是前端挑战 v24.09.04 的提交,Glam Up My Markup:Space 我建造了什么 探索太阳系:发现行星 这是一个允许用户探索行星、了解其独特功能并踏上太阳系虚拟旅程的网站。 演示 演示链接 – https://rayx81194.github.io/space/Gi…

    2025年12月19日
    000
  • Qopy:作为开发人员我最喜欢的剪贴板管理器

    作为一名开发人员,我一直在寻找可以使我的工作流程更顺畅、更高效的工具。最近,我偶然发现了 Qopy,一个可以在 Linux 和 Windows 上运行的开源剪贴板管理器。 什么是Qopy? Qopy 是一个简单的剪贴板管理器,旨在改进标准剪贴板体验。它的设计宗旨是用户友好、可靠且快速。 为什么这么好…

    2025年12月19日
    000
  • 开发人员人工智能入门:揭秘基础知识部分

    开发者们大家好! 人工智能不再只是一个梦想。它就在这里并改变我们构建软件的方式。它可以使应用程序更好、更有用。但如何开始在项目中使用人工智能呢? 本系列旨在为您提供踏上人工智能开发之旅的基础知识。在第一部分中,我们将深入研究核心概念并提供使用 langchain 和 openai 的实践示例。 揭秘…

    2025年12月19日
    000
  • 如何掌握 MERN 堆栈:全栈开发人员指南

    MERN 堆栈(MongoDB、Express.js、React.js、Node.js)已成为全堆栈 Web 开发最流行的技术之一。作为一名开发人员,学习 MERN 堆栈可以打开一个充满机遇的世界,并让您走上构建强大的动态 Web 应用程序的道路。以下是您如何掌握 MERN 堆栈并将您的全堆栈开发技…

    2025年12月19日
    000
  • 免费接龙

    很久以前,在同一个星系中,我开始尝试制作 freecell,作为学习 angular 1.3 的一种方式。 我已经走了这么远,然后我就被其他事情分散了注意力,就像副项目一样。 我最近有一些空闲时间(我知道,我也没想到),所以我想我应该再试一次。 我基本上是从头开始,因为我对 angular 1.3 …

    好文分享 2025年12月19日
    000
  • 使用 React 构建笑话生成器

    介绍 在本教程中,我们将指导您使用 react 构建一个简单而有趣的笑话生成器。这个项目非常适合想要练习在 react 中处理 api 请求并管理功能组件中的状态的初学者。 项目概况 这个笑话生成器从 api 中获取随机笑话,并在用户单击按钮时将其显示在屏幕上。它具有干净简约的用户界面,使其易于交互…

    2025年12月19日 好文分享
    000
  • 星球大战主题太阳系指南 – 魅力我的标记:

    这是前端挑战 v24.09.04 的提交,Glam Up My Markup: Space 我建造了什么 探索太阳系:受星球大战启发的银河之旅 想象一下,偶然发现一本来自遥远星系的传奇旅游手册——一本关于被称为太阳系的神秘恒星系统的指南。本着星球大战宇宙的精神,这个项目将我们自己的天体社区变成了冒险…

    2025年12月19日
    000
  • 使用 React 构建密码验证器

    介绍 在本教程中,我们将指导您使用 react 构建一个简单有效的密码验证器。这个项目非常适合想要在 react 中练习表单验证和处理用户输入的初学者。 项目概况 密码验证器实时检查用户密码的强度,并提供有关密码是否符合强密码标准的反馈。反馈显示在输入字段下方,鼓励用户创建更安全的密码。 特征 实时…

    2025年12月19日
    000
  • 代码与乐趣:编程的乐趣

    编码已经成为一种通用语言,一种超越国界、行业和年龄的技能。但除了技术术语和解决问题的复杂性之外,还有一个充满创造力、创新和纯粹快乐的世界——“代码与乐趣”的世界。对于许多人来说,编码不仅仅是一项工作或必需品;而且是一种必需品。这是一种激情、一种爱好和一种表达方式。让我们深入探讨编码如何成为一种令人愉…

    2025年12月19日
    000
  • 我的第一个 VSCode 插件,用于导入语句的语法转换

    这是一个用于导入语句语法转换的插件。 有时需要修改 import 语句,例如将 import { a } 从 ‘b’ 更改为 const { a } = require(‘b’);。 您可以使用此插件来实现此目的。 可以安装 您可以在vscode中搜索…

    2025年12月19日
    000
  • 前端尝试

    这是前端挑战 v24.09.04 的提交内容,美化我的标记:space 我建造了什么 我构建了一个以太空为主题的登陆页面,提供有关太空探索的信息。目标是创造一个有吸引力的简约设计,突出太空历史、当前任务、未来任务等的关键方面。该页面包括主页、关于、历史、当前任务、未来任务、调查问卷和联系信息等部分。…

    2025年12月19日 好文分享
    000
  • Leetcode:交替合并字符串

    问题陈述 1768. 交替合并字符串 给定两个字符串,word1 和 word2,任务是通过交替字符来合并它们。该过程从 word1 开始,一直持续到一个字符串用完为止。较长字符串中的任何剩余字符都将附加到合并字符串的末尾。 我的思考过程 考虑到问题的简单性,我立即认识到两指针方法是最合适的解决方案…

    2025年12月19日
    000
  • Jira、Linear 和 Asana 的笔源替代品

    像 jira 这样的项目管理工具在软件开发中是必不可少的,但通常并不受欢迎。这些工具可能会通过强制执行严格的流程来阻碍开发人员。尽管杂乱,jira 的高水平定制性使其在各行业中广受欢迎。 虽然定制是一个关键优势,但可以通过开源解决方案更有效地实施。 考虑到这一点,我编制了一份开源项目管理和问题跟踪工…

    2025年12月19日
    000
  • 教程:如何将密钥集成到 Nuxtjs 中

    介绍 在本教程中,我们将指导您完成将密钥身份验证集成到 nuxt.js 应用程序中的过程。我们将涵盖从设置 nuxt.js 项目到实现 corbado ui 组件以实现无缝密钥登录体验的所有内容。 如果您想直接跳到代码中,可以在我们的 github 存储库中找到完整的示例。 在此处阅读完整的博客文章…

    2025年12月19日
    000
  • 在当今时代使用 Nextjs:现代 Web 开发框架

    在当今快速发展的数字环境中,Web 开发变得比以往更加复杂和动态。开发人员不断寻找能够简化工作流程、提高性能和增强用户体验的工具。在各种可用的框架中,Next.js 已成为开发人员的最佳选择,因其易用性、灵活性和强大的功能而广受欢迎。 Next.js 构建于 React 之上,通过提供用于构建现代 …

    2025年12月19日
    000
  • 使用 Nextjs Prisma、TailwindCSS 和 Next Auth 进行旅行预订

    旅行预订应用程序 使用 next.js 14、tailwind css、typescript 和 prisma 进行中的旅行应用程序。允许用户注册、游览浏览、预订和评论提交。对开发过程中的所有贡献开放。 入门 克隆存储库:git clone https://github.com/saidmounai…

    2025年12月19日
    000
  • 持续测试:确保 DevOps 管道的质量

    持续测试是现代软件开发中的关键实践,尤其是在 DevOps 框架中。它涉及在整个软件交付管道中自动执行测试,以确保对代码库所做的每项更改都得到彻底验证。通过将测试集成到开发过程的每个阶段,持续测试旨在尽早发现并解决缺陷,从而显着降低生产中失败的风险。什么是持续测试?持续测试是作为软件交付管道的一部分…

    2025年12月19日
    000
  • JavaScript 中的 Promise:理解、处理和掌握异步代码

    简介 我曾经是一名 java 开发人员,我记得第一次接触 javascript 中的 promise 时。尽管这个概念看起来很简单,但我仍然无法完全理解 promise 是如何工作的。当我开始在项目中使用它们并了解它们解决的案例时,情况发生了变化。然后灵光乍现的时刻到来了,一切都变得更加清晰了。随着…

    2025年12月19日
    000
  • git

    git 是一个强大的版本控制系统,用于跨多个用户管理代码并跟踪不同版本之间的更改。 安装: 从以下路径下载并安装git https://git-scm.com/download/win 安装后,git 可以通过各种命令用作版本控制系统。您可以为计算机上的特定文件夹配置 git,从而允许您管理对现有文…

    2025年12月19日
    000
  • 了解如何在

    模数教程回来了! 大家好!暑假结束后,我带着 modulo 教程回来了。我正在制作更多教程 – 请继续关注。也就是说,如果您对我的下一个主题有任何特别的想法,请务必在评论中告诉我! 我的上一篇教程是关于 api 驱动的 pokémon dance party 组件的超级快速且有趣的“仅 …

    2025年12月19日 好文分享
    000

发表回复

登录后才能评论
关注微信