Может ли значение по умолчанию для атома отдачи быть объектом?

#javascript #reactjs #recoiljs

#javascript #reactjs #recoiljs

Вопрос:

Могу ли я установить значение по умолчанию для атома отдачи как объект?

например:

 export const currentUserState = atom({
  key: 'currentUserState',
  default: { name: '', email: '', userId: null },
});
  

А затем установите его с помощью:

 import { currentUserState } from '../atoms/atoms';

const setUserState = useSetRecoilState(currentUserState);
setUserState(name: 'John', email: 'foo@bar.com', userId: getRand());
  

Ответ №1:

Да, это разрешено. Состояние атома отдачи может быть объектом. Вы правильно инициализировали атом, но когда вы устанавливаете атом, вам нужно передать объект, поскольку состояние является объектом.

Инициализировать currentUserState атом

 export const currentUserState = atom({
  key: 'currentUserState',
  default: {name: '', email: '', userId: null}
});
  

а затем установите состояние атома следующим образом

 import {currentUserState} from '../recoilstate/atoms';

const setUserState = useSetRecoilState(currentUserState);

setUserState({
  name: 'John', 
  email: 'foo@bar.com', 
  userId: getRand()
});
  

Комментарии:

1. Как насчет слияния предыдущего пользовательского состояния с оператором распространения и изменения части свойства на новое значение? Как изменить состояние в селекторе вместо этого с помощью setState?

Ответ №2:

Да, атом отдачи может быть объектом.

Я написал этот код, который вы можете увидеть ниже в рабочей демонстрации.

  const changeValue = () => {
    setUserState({ name: "John", email: "foo@bar.com", userId: Math.random() });
  };
  

Рабочая демонстрация

CodeSandbox