如何用RecoilJS构造深嵌套状态树?我应该把每根树枝都当作单独的原子什么的吗?
发布于 2020-07-28 07:19:03
如果不将结构拆分为原子,将不会利用最重要的反冲特性:只更新订阅到原子的UI组件。如果只有一个原子,那么每次更新原子时,都会重新呈现UI。如果你不分裂原子的结构,使用反应上下文和使用反冲没有区别。
相反,将数据拆分为原子和原子家族(以及选择器和选择器家族)可以使您在最佳状态下利用反冲。只有组件订阅特定的原子重新呈现时,原子更新!
原子和原子家族有什么区别?为什么要充分利用它们,而不仅仅是原子(最终是选择器家族),为什么如此重要?
嵌套原子和原子家族有一个共同点:它们允许您管理嵌套的数据结构,例如,将里程数据存储在一个原子中:
// carsMileage atom structure
{
teslaModel3: {
miles: 50.000
},
chevroletCorvette: {
miles: 100.000
}
}只有订阅到原子上的carsMileage原子重新呈现的组件才会发生更改,但是不能有一个只显示teslaModel3的里程数的组件,而当chevroletCorvette的里程数发生变化时(也不能使用选择器家族),则不能重新呈现chevroletCorvette的里程数。
{
miles: 50.000
}通过一个带有两个键(teslaModel3和chevroletCorvette)的原子家族进行管理,可以让组件订阅它们感兴趣的原子。更新teslaModel3里程不会导致ChevroletCorvetteData组件重新呈现.请注意,从数据的角度来看,原子和原子家族都只是嵌套对象,仅此而已。
仅仅是详尽无遗:原子家族的唯一缺点是后坐力不能帮助您记住用于存储数据的键(teslaModel3和chevroletCorvette)。你必须把钥匙放在另一个原子里,否则你就倒霉了。
最后:不,不对所有数据使用单个原子,如果您想这样做,可以避免反冲。
https://stackoverflow.com/questions/63126754
复制相似问题