【问题标题】:Retrieve an atom/selector by key (string)?通过键(字符串)检索原子/选择器?
【发布时间】:2021-07-30 03:34:14
【问题描述】:

使用Recoil.js 时,通过将包含键(字符串)的对象交给atom() 来创建原子:

const textState = atom({
  key: 'textState', // unique ID (with respect to other atoms/selectors)
  default: '', // default value (aka initial value)
});

稍后可以通过将 atom() 返回的东西交给 useRecoilState 之类的东西来获取值(和一个 setter):

function TextInput() {
  const [text, setText] = useRecoilState(textState);

我需要首先使用atom() 创建原子,但之后我很想使用字符串键获取值(和设置器)。我在想象这样的事情:

function TextInput() {
  const [text, setText] = useRecoilState('textState');

这样做的用例是,我可以在有意义的位置(即层次结构的更高层)创建所有原子(和选择器),然后让组件访问该状态,而不必包含文件中的原子最初创建它们的人。

是否可以使用键(字符串/文本)来获取 Recoil 原子/选择器的值/设置函数,而不必将 useRecoilState()(等)从 atom() 返回的东西交给 useRecoilState()(等)?

【问题讨论】:

    标签: recoiljs


    【解决方案1】:

    不,这是不可能的。对atom() 的调用返回的值是对状态的引用,useRecoil... 挂钩需要访问它。这也不适用于需要参数来访问特定原子的atomFamilies

    我也不确定有什么好处。如果您愿意,您仍然可以在层次结构中的某个位置创建原子。我也不确定“不必包含最初创建它们的文件中的原子”是什么意思。那会有什么问题呢?

    Recoil 的整个想法是让状态树与您的组件树正交,因此不需要在层次结构中创建更高的层次。在运行时需要它们的地方创建原子。 感觉就像您希望在组件树中的一个位置创建更多类似 redux 的模式,这违背了反冲的核心理念,即把它与更多类似流动的状态管理模式区分开来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-07
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      相关资源
      最近更新 更多