Получить атом/селектор с помощью ключа (строки)?

#recoiljs

Вопрос:

При использовании Recoil.js, один создает атом, передавая atom() объект, содержащий ключ (строку):

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

Позже можно получить значение (и установщик), передав вещь, которая atom() возвращается к чему-то вроде useRecoilState:

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

Это нормально, что мне нужно сначала создать атом с помощью atom() , но после этого я хотел бы получить значение (и установщик), используя строковый ключ. Я представляю себе что-то вроде этого:

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

Вариант использования для этого заключается в том, что я мог бы затем создать все свои атомы (и селекторы) в местах, которые имеют смысл (т. Е. Выше по иерархии), а затем предоставить компонентам доступ к этому состоянию без необходимости включать атомы из файла, который их изначально создал.

Можно ли получить функцию установки значений для атомов/селекторов отдачи с помощью ключа (строки/текста) вместо того, чтобы передавать useRecoilState() (и т. Д.) Возвращенную вещь atom() ?

Ответ №1:

Нет, это невозможно. Значение, atom() возвращаемое вызовом, является ссылкой на состояние, необходимое useRecoil... крючкам для доступа к нему. Это также не будет работать с atomFamilies тем, для которого необходим параметр для доступа к определенному атому.

Я также не уверен, в чем будет заключаться выгода. Вы все еще можете создавать атомы где-то наверху иерархии, если захотите. Я также не уверен, что вы подразумеваете под «без необходимости включать атомы из файла, который их изначально создал». В чем может быть проблема с этим?

Вся идея отдачи состоит в том, чтобы иметь дерево состояний, ортогональное вашему дереву компонентов, поэтому нет необходимости создавать что-то выше по иерархии. Атомы создаются там, где они необходимы во время выполнения. Такое ощущение, что вы хотите иметь больше шаблонов, подобных redux, с атомами, создаваемыми в одном месте в дереве компонентов, что противоречит этой основной идее отдачи, которая отличает ее от более похожих на потоки шаблонов управления состоянием.