Reducer-Modus
Verwenden Sie dies, wenn es besser ist, die Statusänderungsregeln über Aktionen zu sammeln, anstatt direkt den Setter aufzurufen.
Benannter Reducer-Zustand
createRxReducerdispatcht Aktionen, ohne den Zustand direkt zu ändern. Geeignet für Zustände mit mehreren Änderungsregeln wie Warenkorb, Todo, Editor-Zustand.
tsx
type TodoAction =
| { type: "add"; text: string }
| { type: "toggle"; id: number }
| { type: "clearDone" };
function todoReducer(state: TodoState, action: TodoAction): TodoState {
switch (action.type) {
case "add":
return {
items: [...state.items, { id: state.nextId, text: action.text, done: false }],
nextId: state.nextId + 1,
};
case "toggle":
return {
...state,
items: state.items.map((item) =>
item.id === action.id ? { ...item, done: !item.done } : item,
),
};
default:
return state;
}
}
const { dispatchTodo, useTodo } = createRxReducer(
initialTodoState,
todoReducer,
"todo",
);Verwenden Sie den Reducer-Tuple-Helfer für den Laufzeit-Schlüssel.
Wenn Sie den Reducer-Store für jeden Laufzeit-Schlüssel wie Workspace-ID, Projekt-ID trennen müssen. createRxReducerTupleVerwenden Sie.
tsx
export function useWorkspaceFilterState(workspaceId: string) {
return createRxReducerTuple(
initialFilterState,
filterReducer,
`workspace-filter:${workspaceId}`,
{ storage: "auto" },
);
}