Как избежать ошибки отдачи «Настройка селекторов в атомном обновлении не поддерживается» ⇐ Javascript
-
Гость
Как избежать ошибки отдачи «Настройка селекторов в атомном обновлении не поддерживается»
У меня есть код управления состоянием, использующий Recoil, и я столкнулся с ошибкой:
Настройка селекторов в атомном обновлении не поддерживается
Я понимаю, почему возникает эта ошибка. У меня есть несколько атомов, которые следуют шаблону использования селекторов для установки значений по умолчанию, например:
экспортировать const ProductState = атом({ ключ: 'productstate', по умолчанию: селектор({ ключ: 'productstate/default', get: ({ get }) => get(...асинхронный селектор...) }) }) Проблема возникает, когда я позже использую useRecoilTransaction__UNSTABLE, чтобы попытаться установить этот селектор, например:
const setProductState = useRecoilTransaction__UNSTABLE(({ set }) => newState => { set(productState, newState) }) При использовании этого установщика транзакции возникает описанная выше ошибка, пока значение default атома установлено селектором. Вот минимальный воспроизводимый пример: ссылка
На данный момент я понимаю, что это просто запрещено, хотя я не уверен, что понимаю, почему.
Я хотел бы знать, есть ли какой-нибудь способ обойти это. Как я могу обеспечить транзакционное обновление набора частей состояния (что позволяет useRecoilTransaction) и установить состояние атома по умолчанию. (Примечание: здесь я кратко пытался использовать Atom Effects, но мне не удалось заставить обработку ошибок работать должным образом. Эффекты, казалось, поглощали ошибки).
У меня есть код управления состоянием, использующий Recoil, и я столкнулся с ошибкой:
Настройка селекторов в атомном обновлении не поддерживается
Я понимаю, почему возникает эта ошибка. У меня есть несколько атомов, которые следуют шаблону использования селекторов для установки значений по умолчанию, например:
экспортировать const ProductState = атом({ ключ: 'productstate', по умолчанию: селектор({ ключ: 'productstate/default', get: ({ get }) => get(...асинхронный селектор...) }) }) Проблема возникает, когда я позже использую useRecoilTransaction__UNSTABLE, чтобы попытаться установить этот селектор, например:
const setProductState = useRecoilTransaction__UNSTABLE(({ set }) => newState => { set(productState, newState) }) При использовании этого установщика транзакции возникает описанная выше ошибка, пока значение default атома установлено селектором. Вот минимальный воспроизводимый пример: ссылка
На данный момент я понимаю, что это просто запрещено, хотя я не уверен, что понимаю, почему.
Я хотел бы знать, есть ли какой-нибудь способ обойти это. Как я могу обеспечить транзакционное обновление набора частей состояния (что позволяет useRecoilTransaction) и установить состояние атома по умолчанию. (Примечание: здесь я кратко пытался использовать Atom Effects, но мне не удалось заставить обработку ошибок работать должным образом. Эффекты, казалось, поглощали ошибки).
Мобильная версия