deno.land / x / jotai@v1.8.4 / src / immer / useImmerAtom.ts
123456789101112131415161718192021222324252627282930import { useCallback } from 'react'import { produce } from 'immer'import type { Draft } from 'immer'import { useAtom } from 'jotai'import type { WritableAtom } from 'jotai'
type Scope = NonNullable<Parameters<typeof useAtom>[1]>
export function useImmerAtom<Value, Result extends void | Promise<void>>( anAtom: WritableAtom<Value, (draft: Draft<Value>) => void, Result>, scope?: Scope): [Value, (fn: (draft: Draft<Value>) => void) => Result]
export function useImmerAtom<Value, Result extends void | Promise<void>>( anAtom: WritableAtom<Value, (value: Value) => Value, Result>, scope?: Scope): [Value, (fn: (draft: Draft<Value>) => void) => Result]
export function useImmerAtom<Value, Result extends void | Promise<void>>( anAtom: WritableAtom<Value, (value: Value) => Value, Result>, scope?: Scope) { const [state, setState] = useAtom(anAtom, scope) const setStateWithImmer = useCallback( (fn: (draft: Draft<Value>) => void) => setState(produce(fn)), [setState] ) return [state, setStateWithImmer]}
Version Info