Resettable
Jotai 核心不支持可重置的原子,但你可以使用 jotai/utils 中的辅助函数来创建它们。
使用 atomWithReset / useResetAtom 创建可重置的原始原子
Section titled “使用 atomWithReset / useResetAtom 创建可重置的原始原子”import { useAtom } from 'jotai'import { atomWithReset, useResetAtom } from 'jotai/utils'
const todoListAtom = atomWithReset([ { description: 'Add a todo', checked: false },])
const TodoList = () => { const [todoList, setTodoList] = useAtom(todoListAtom) const resetTodoList = useResetAtom(todoListAtom)
return ( <> <ul> {todoList.map((todo) => ( <li>{todo.description}</li> ))} </ul>
<button onClick={() => setTodoList((l) => [ ...l, { description: `New todo ${new Date().toDateString()}`, checked: false, }, ]) } > Add todo </button> <button onClick={resetTodoList}>Reset</button> </> )}使用 RESET 符号的派生原子
Section titled “使用 RESET 符号的派生原子”import { atom, useAtom, useSetAtom } from 'jotai'import { atomWithReset, useResetAtom, RESET } from 'jotai/utils'
const dollarsAtom = atomWithReset(0)const centsAtom = atom( (get) => get(dollarsAtom) * 100, (get, set, newValue: number | typeof RESET) => set(dollarsAtom, newValue === RESET ? newValue : newValue / 100))
const ResetExample = () => { const [dollars] = useAtom(dollarsAtom) const setCents = useSetAtom(centsAtom) const resetCents = useResetAtom(centsAtom)
return ( <> <h3>Current balance ${dollars}</h3> <button onClick={() => setCents(100)}>Set $1</button> <button onClick={() => setCents(200)}>Set $2</button> <button onClick={resetCents}>Reset</button> </> )}