首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用RecoilJS构造深嵌套状态树?

如何用RecoilJS构造深嵌套状态树?
EN

Stack Overflow用户
提问于 2020-07-28 03:50:24
回答 1查看 1.9K关注 0票数 6

如何用RecoilJS构造深嵌套状态树?我应该把每根树枝都当作单独的原子什么的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 07:19:03

如果不将结构拆分为原子,将不会利用最重要的反冲特性:只更新订阅到原子的UI组件。如果只有一个原子,那么每次更新原子时,都会重新呈现UI。如果你不分裂原子的结构,使用反应上下文和使用反冲没有区别。

相反,将数据拆分为原子和原子家族(以及选择器和选择器家族)可以使您在最佳状态下利用反冲。只有组件订阅特定的原子重新呈现时,原子更新!

原子和原子家族有什么区别?为什么要充分利用它们,而不仅仅是原子(最终是选择器家族),为什么如此重要?

嵌套原子和原子家族有一个共同点:它们允许您管理嵌套的数据结构,例如,将里程数据存储在一个原子中:

代码语言:javascript
复制
// carsMileage atom structure
{
  teslaModel3: {
    miles: 50.000
  },
  chevroletCorvette: {
    miles: 100.000
  }
}

只有订阅到原子上的carsMileage原子重新呈现的组件才会发生更改,但是不能有一个只显示teslaModel3的里程数的组件,而当chevroletCorvette的里程数发生变化时(也不能使用选择器家族),则不能重新呈现chevroletCorvette的里程数。

代码语言:javascript
复制
{
  miles: 50.000
}

通过一个带有两个键(teslaModel3chevroletCorvette)的原子家族进行管理,可以让组件订阅它们感兴趣的原子。更新teslaModel3里程不会导致ChevroletCorvetteData组件重新呈现.请注意,从数据的角度来看,原子和原子家族都只是嵌套对象,仅此而已。

仅仅是详尽无遗:原子家族的唯一缺点是后坐力不能帮助您记住用于存储数据的键(teslaModel3chevroletCorvette)。你必须把钥匙放在另一个原子里,否则你就倒霉了。

最后:不,不对所有数据使用单个原子,如果您想这样做,可以避免反冲。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63126754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档