自实施以来,似乎状态管理计划不兼容。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