当前位置: 首页 > 网络应用技术

教你写一个反应状态管理库

时间:2023-03-05 22:01:41 网络应用技术

  自实施以来,似乎状态管理计划不兼容。DanAbramov非常早就提到了“您可能不需要Redux”。开发人员必须写很多“模式代码”,繁琐和重复的开发人员不愿意容忍。此外,此外,该概念对新手不友好,最大的缺点是,它对这种类型的支持太差了,这就是在大型项目中不可接受。

  从权利和缺点的优势和缺点来看,我们可以自己写一个国家管理库。这次需要实现的目的:

  因此,阅读本文档的前提必须具有一定的概念。

  目前,许多受欢迎的州管理库太复杂了,具有许多概念和API。我们需要计划如何实现它。StatusManagement是国家改善的最终表现。我们的目的是足够简单,很少有API。考虑我们是否可以通过穿透管理和存储最基本的平等状态来考虑,然后尝试。

  这是三个最简单的功能组件演示。我们使用它来测试:

  我们定义,一个非常基本的状态模型

  并定义基本并合作

  接下来,我们使用它使其穿透价值

  这样,编写了最简单的穿透状态管理代码。您发现问题所在吗?状态的业务逻辑写在应用程序组件中。此代码耦合太高了!让我们完成它。需要通过自定义挂钩拉开的状态,以保持逻辑和组件的纯度。

  在中国使用这个钩子

  如今,它更加舒适。逻辑在单独的钩子中受到控制,该钩子具有高内部收集的特征。这可能不足以考虑它,和谐的逻辑不足以收集,继续:继续:

  将被拉入组件

  看看应用程序组件,清楚吗?

  好吧,我们可以将此模型封装在一种方法中,并通过工厂模式创造和平。

  好的,计算一个简单的状态管理。请尝试一下,让我们尝试一下,然后移动之前定义的代码

  在中间用出口商替换

  导出的,因为当定义可以完美识别当前形状时使用通用类型,以便编辑器的智能提示

  因此,恭喜,您创建了一个属于您自己的州管理库

  但是便利和性能总是可以选择的。毫无疑问,这也是正确的。由于没有差异,更新功能确定所有优化都会失败。让整个项目跟随。每次都将接受新的对象。所有使用的子组件都会一起更新,从而导致毫无意义的损失调用。

  有解决方案吗?考虑一下,总是有更多困难的方法,我们可以更喜欢上下文的特征并放弃导致重新施用的特征(即,每个传递给他固定的参考)。情况,如果更新的子组件不遵循更新,我该怎么办?rerender可以触发什么?答案是我们可以将方法提升到容器以安排并调用更新。

  所以现在是不变的。如何实现更新逻辑?这个想法可以是这样:当子组件更新时,我们将其添加到中间,然后将其删除,然后调用此操作。

  状态一个,用于放置这些子组件

  目前,在子组件中需要这样的钩子。我想选择其中的一些状态。我不需要通知我即可在没有相关更改的情况下进行更新。

  然后,我们有一个名称,以监视哪些值可以使此组件。

  函数类型可以定义为:通过传递函数,手动指定需要监视的值,并返回此值

  然后让我们实现此功能。第一个是触发方法。这是自我提高的内部增加,打电话时不需要参数编号

  在这里,我们需要与容器进行通信以获取所有状态并传递到功能

  创建一个函数,通过参考重新播放选择,然后在选择后将其提供给函数,以便此函数可以获取最新的,

  实现此功能

  我们需要添加/删除组件

  完整的实现如下:

  在最后一步中,让我们重写

  更大的功绩!返回的新物体将被比较浅。API的使用也与学习成本一样好。

  值得注意的是,函数中返回的值每次都不能再次生成。

  我以前对这里进行了分析,该钩子用于替换它。有关源代码,请参见HEO。React进行了新的API讨论:。

  蛋糕上的锦上添花可以与更常用的API结合在一起,名称为

  尝试效果:

  好的,这是当时撰写国家管理层的想法。您学会了吗?请参阅https://github.com/minjieliu/heo,这也是我们正在使用的州管理。它足够轻巧,与钩子合作,完美支撑TS并改变原始代码。目前,它在生产环境中已经稳定了一年多。最高的复杂性项目是一次超过2,000个递归结构的组成部分,而且性能仍然很棒。

  USEMETHODS分析:使用USECALLBACK放弃,我们有更好的方法

  欢迎学习高级。

  原始:https://juejin.cn/post/7095683044840833037