-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Labels
✨Feature RequestNew feature or requestNew feature or request
Description
Sometimes we want to watch a store state and do some effects
like this, by easy-peasy https://easy-peasy.vercel.app/docs/api/effect-on.html
export default createStore({
items: [],
saving: false,
setSaving: action((state, payload) => {
state.saving = payload;
}),
addItems: action((state, payload) => {
state.items.push(payload);
}),
stateChange: unstable_effectOn(
[(state) => state.items],
async (actions, change) => {
const [items] = change.current;
actions.setSaving(true);
await todosService.save(items);
actions.setSaving(false);
}
)
});in the react-model v4, we usually write it like this
export const { useStore } = createStore(() => {
const [todoItems, setTodoItems] = useModel<string[]>([])
const [saving, setSaving] = useModel<boolean>(false)
const addItems = useCallback((item) => setTodoItems(todoItems => todoItems.push(item)), [])
// it will register repeatedly
// so may be provide a new store effect hook just execute once
useEffect(() => {
setSaving(true);
await todosService.save(todoItems);
setSaving(false);
}, [todoItems])
return {
todoItems,
saving,
addItems
}
})Metadata
Metadata
Assignees
Labels
✨Feature RequestNew feature or requestNew feature or request