当时我的信念是全局状态应该通过 React Context 传递,以便它可以与 React 并发模式一起工作。因此,我制作了一个比较表来区分我的图书馆和其他图书馆,Zustand 就是其中之一。这是2019年的事情。

祖斯坦v3

2020年,我加入了Poimandres团队并接管了Zustand的开发。当时我的兴趣是让全局状态库与 React 并发模式一起工作。不可能从并发模式中获得全部好处,但是有一个名为 useMutableSource 的实验性 API 可以使全局状态与并发模式兼容。

我使用基于 React Context 的解决方案和 React-Tracked 尝试了很多事情,并且想知道在没有 React Context 的情况下我们可以用全局状态做什么。 Zustand 已有一年了,但没有人维护它。于是,我决定接手。

实验性的 useMutableSource API 还没有准备好,所以第一个任务是更新各种内容并修复一些错误。这就是 Zustand v3 诞生的时候。我的希望是很快发布带有 useMutableSource 的 v4,但它没有发生。这背后还有一个故事。

如今,将全局状态置于外部并可选择使用 React Context 来传递其存储是一种众所周知的模式。 Zustand 是这种模式的先驱。人们对 React Context 中没有全局状态非常怀疑,我们很难解释这是一个有效的模式。

当前状态

我对 Zustand 关心的事情之一是它的简单实现和它的小包大小。如果你查看源代码,你会发现它只不过是使用 React hooks 和最小的存储实现。

截至撰写本文时,Zustand v4 是最新版本,它具有非常先进的 TypeScript 支持,并且代码几乎完全从 v3 重写。我们的 Zustand v5 已经准备好迎接下一个版本了。

最后但并非最不重要的一点是,有几个贡献者维护这个项目。我接手这个项目的时候没想到会发生这样的事情。我对此非常感激。感谢大家。

","image":"http://www.luping.net/uploads/20240730/172233792466a8ca84b1d78.jpg","datePublished":"2024-07-30T19:12:03+08:00","dateModified":"2024-07-30T19:12:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Zustand是如何诞生的

Zustand是如何诞生的

发布于2024-07-30
浏览:848

How Zustand Was Born

更准确地说,自从 Zustand v3

介绍

在这篇文章中,我想分享 Zustand 的发展背后的故事。准确地说,我不是 Zustand 的原作者,当 Zustand v0 诞生时,我正在开发其他全局状态库,尤其是 React-Tracked。顺便说一句,我现在认为自己是 Zustand 的(第二)作者。

我发现我的推文提到了 Zustand,并将其与其他库(包括我的库)进行了比较。

当时我的信念是全局状态应该通过 React Context 传递,以便它可以与 React 并发模式一起工作。因此,我制作了一个比较表来区分我的图书馆和其他图书馆,Zustand 就是其中之一。这是2019年的事情。

祖斯坦v3

2020年,我加入了Poimandres团队并接管了Zustand的开发。当时我的兴趣是让全局状态库与 React 并发模式一起工作。不可能从并发模式中获得全部好处,但是有一个名为 useMutableSource 的实验性 API 可以使全局状态与并发模式兼容。

我使用基于 React Context 的解决方案和 React-Tracked 尝试了很多事情,并且想知道在没有 React Context 的情况下我们可以用全局状态做什么。 Zustand 已有一年了,但没有人维护它。于是,我决定接手。

实验性的 useMutableSource API 还没有准备好,所以第一个任务是更新各种内容并修复一些错误。这就是 Zustand v3 诞生的时候。我的希望是很快发布带有 useMutableSource 的 v4,但它没有发生。这背后还有一个故事。

如今,将全局状态置于外部并可选择使用 React Context 来传递其存储是一种众所周知的模式。 Zustand 是这种模式的先驱。人们对 React Context 中没有全局状态非常怀疑,我们很难解释这是一个有效的模式。

当前状态

我对 Zustand 关心的事情之一是它的简单实现和它的小包大小。如果你查看源代码,你会发现它只不过是使用 React hooks 和最小的存储实现。

截至撰写本文时,Zustand v4 是最新版本,它具有非常先进的 TypeScript 支持,并且代码几乎完全从 v3 重写。我们的 Zustand v5 已经准备好迎接下一个版本了。

最后但并非最不重要的一点是,有几个贡献者维护这个项目。我接手这个项目的时候没想到会发生这样的事情。我对此非常感激。感谢大家。

版本声明 本文转载于:https://dev.to/dai_shi/how-zustand-was-born-48h3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-03-11
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-03-11
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-03-11
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-03-11
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-03-11
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-03-11
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-03-11
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-03-11
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-03-11
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-03-11
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-03-11
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-03-11
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-03-11
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-03-11

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3