Skip to main content
Module

x/jotai/src/immer/useImmerAtom.ts

👻 Primitive and flexible state management for React
Go to Latest
File
import { useCallback } from 'react'import { produce } from 'immer'import type { Draft } from 'immer'import { useAtom } from 'jotai'import type { WritableAtom } from 'jotai'import type { Scope } from '../core/atom'
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]}