useSyncExternalStoreExports 状态源码解释

news/2024/9/21 16:23:26
在本文中,我们将了解 zustand 如何在其[源代码]中使用 usesyncexternalstoreexports。usesyncexternalstoreexports 是从 use-sync-external-store/shim/with-selector 导入的。 use-sync-external-store 是 react.usesyncexternalstore 的向后兼容垫片,可与任何支持 hooks 的 react 配合使用。读到上面这句话,你可能想知道什么是usesyncexternalstore。 usesyncexternalstoreusesyncexternalstore 是一个 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<tstate stateslice>( api: ReadonlyStoreApi<tstate>, selector: (state: TState) =&gt; StateSlice = identity as any, equalityFn?: (a: StateSlice, b: StateSlice) =&gt; boolean,) { const slice = useSyncExternalStoreWithSelector( api.subscribe, api.getState, api.getInitialState, selector, equalityFn, ) useDebugValue(slice) return slice}</tstate></tstate>登录后复制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#l44https://www.npmjs.com/package/use-sync-external-storehttps://legacy.reactjs.org/docs/hooks-reference.html#usesyncexternalstorehttps://react.dev/reference/react/usesyncexternalstorehttps://github.com/reactwg/react-18/discussions/86 以上就是useSyncExternalStoreExports 状态源码解释的详细内容,更多请关注我的其它相关文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/62986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Zlmedia搭建简记

进入新公司之后,发现他们的视频播放使用的是ZlmediaKit这个工具,自己尝试使用了一下发现很好用,于是在自己机器上搭建了一个服务玩玩。 因为没有在线的摄像头,所以这里采用的是ffmpeg推送mp4文件作为视频流输入,推送到zlmedia服务,再利用zlmedia本身所带的拉流服务,最终…

C 风格字符串函数

▲《C++ Primer》 P109 我们无法保证 c_str 函数返回的数组一直有效,事实上,如果后续的操作改变了 string 的值就可能让之前返回的数组失去效用。 WARNING: 如果执行完 c_str() 函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。

基于IDF的ESP32S3-LVGL DEMO移植

简介 ESP32-32出色的性价比,较好的性能与内存空间,可以好利用来完成GUI显示库的加载 LVGL LVGL是一款比较流行的致力于MCU与MPU创建漂亮UI的嵌入式图形库,免费且开源。 硬件 硬件采用的是正点原子的ESP32-S3 屏幕使用的是SPI通信方式,配合IO口控制(RST,A0),来实现LCD屏幕…

nginx: 按ip地址限流

一,以固定的速度提供服务 语法: 例子 limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;server { location / { limit_req zone=test; }} 语法: imit_req_zone 用于设置限流和共享内存区域的参数,格式为: limit_req_zone key zone rate。 key: 定…

Free5GC源码研究(2) - 单个NF的软件架构

前文我们总览了free5gc的总体软件架构。整一个free5gc系统又由几个NF(Network Function)组成,所以本文继续深入研究单个NF的软件架构。要研究NF的软件架构,最直接的方式是找一个简单的NF来回观摩。free5gc/ausf算是比较简单的一个,然而我发现了一个更简单的NF,叫做andy89…

一,初始 MyBatis-Plus

一,初始 MyBatis-Plus @目录一,初始 MyBatis-Plus1. MyBatis-Plus 的概述2. 入门配置第一个 MyBatis-Plus 案例3. 补充说明:3.1 通用 Mapper 接口介绍3.1.1 Mapper 接口的 “增删改查”3.1.1.1 查询所有记录3.1.1.2 插入一条数据3.1.1.3 删除一条数据3.1.1.4 更新一条数据3.…

[神经网络与深度学习笔记]LDA降维

LDA降维 LinearDiscriminant Analysis 线性判别分析,是一种有监督的线性降维算法。与PCA保持数据信息不同,LDA的目标是将原始数据投影到低维空间,尽量使同一类的数据聚集,不同类的数据尽可能分散 步骤:计算类内散度矩阵\(S_b\) 计算类间散度矩阵\(S_w\) 计算矩阵\(S_w^{-1…

C++ 指针和迭代器支持的操作

▲ 《C++ Primer》 P96 指针也都支持上面的操作。