问题描述
使用 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');
这个用例是,我可以在有意义的地方(即,更高层次)创建我的所有原子(和选择器),然后让组件访问该状态,而不必包含文件中的原子最初创建它们。
是否有可能使用键(字符串/文本)来获取反冲原子/选择器的值/设置器函数,而不必手动 useRecoilState()
(等)从 {{1} 返回的东西}}?
解决方法
不,这是不可能的。 atom()
调用返回的值是对状态的引用,useRecoil...
钩子需要访问它。这也不适用于需要参数来访问特定原子的 atomFamilies
。
我也不确定会有什么好处。如果您愿意,您仍然可以在层次结构中的某个位置创建原子。我也不确定您所说的“不必包含最初创建它们的文件中的原子”是什么意思。那会有什么问题?
Recoil 的整个想法是拥有一个与您的组件树正交的状态树,因此不需要在层次结构中的更高层创建。原子是在运行时需要的地方创建的。 感觉就像你想要更多类似 redux 的模式,在组件树的一个地方创建原子,这违背了反冲的核心思想,将其与更多的状态管理模式区分开来。