Open
Description
Hi!
I've come across a situation where it's necessary to change the state of an atom within a reaction.
type AsyncResource = {
hasError: Signal<boolean>;
error: Signal<string>;
}
type NotifyStore = {
messages: Signal<string[]>
addMessage: (message) => void
}
const notify: NotifyStore = useNotify();
const asyncResource: AsyncResource = useAsyncResource(() => fetch('/error-response'));
useEffect(() => react('add message', () => {
if (asyncResource.hasError.value) {
notify.addMessage(asyncResource.error.value)
}
}), [])
When a reaction is triggered, the notify.messages
atom gets updated, and execution fails with the error 'cannot change atoms during reaction cycle'.
From what I understand, this behavior corresponds to this test:
signia/packages/signia/src/__tests__/reactor.test.ts
Lines 20 to 30 in 1d57d3e
Are there any workarounds for this situation?
Metadata
Assignees
Labels
No labels