0

使用Recoil.jsatom()时,通过处理包含键(字符串)的对象来创建原子:

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()

4

1 回答 1

1

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

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

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

于 2021-08-02T08:37:41.933 回答