atomFamily 在 recoil 中的用例是什么?

Pab*_*nda 6 recoiljs

我做了第一个反冲实验,建立了一个可编辑的表格。每个单元格都有一个原子,用于存储其行、列和文本值。我构建这个的方式是

  1. 将每个单元格的原子初始化为字典(只是一个普通对象),键的格式为 [column]x[row]
  2. 然后,我迭代 Table 组件中的这些键,并仅将键传递给每个 Cell 组件
  3. Cell 组件通过使用useRecoilState作为 prop 传递的键访问主字典来使用并找到其特定的 Atom。

现在,在我看来,这个用例(创建数千个具有相同形状的相关原子)是为了atomFamily变得更容易,但我不明白如何以这种方式使用它,在这种方式中,你用一个初始化每个原子具体值。

除此之外,我不明白使用atomFamily 相对于存储原子集合有什么优势。我知道涉及到记忆,但我不明白记忆的是什么,除了,如果我阅读正确的话,能够通过使用相同的 id 再次调用该函数来调用特定的原子,这将使您几乎获得我用字典得到同样的行为。

jse*_*ksn 7

差别很小:如果您想手动记忆和管理您自己的集合atom,那么您当然可以。atomFamily本质上只是:它为您处理记忆,因此您所要做的就是使用唯一的密钥来访问每个atom. 逐字atomFamily记录:

\n
\n

An代表一个带有Recoil 的atom状态。您的应用程序会创建并注册一个原子。但是,如果您的状态不是\xe2\x80\x99t 全局的怎么办?如果您的状态与控件的特定实例或特定元素相关联怎么办?例如,也许您的应用程序是一个 UI 原型设计工具,用户可以在其中动态添加元素,并且每个元素都有状态,例如其位置。理想情况下,每个元素都会有自己的原子态。您可以通过记忆模式自己实现这一点。但是,Recoil为您提供了这种模式的实用程序。原子族代表原子的集合。当您调用时,它将返回一个函数,该函数根据您传入的参数提供原子。<RecoilRoot>atomFamily()atomFamily()RecoilState

\n
\n
\n

至于如何使用的示例atomFamily:除了上面链接的文档之外,Stack Overflow 上还有很多现有的问题和答案,它们已经完全涵盖了这一点。以下是我之前回答过的几个问题:

\n\n