Skip to content

useSetState

Object state merging like class setState.

Object state merging like class setState.

Import

import { useSetState } from '@kamod-ch/hooks'

Live demo

Basic demo

Object state merging like class setState.

{
  "name": "Ada",
  "role": "Maintainer"
}
import { useSetState } from '@kamod-ch/hooks'

export default function UseSetStateDemo() {
  const [state, setState] = useSetState({ name: 'Ada', role: 'Maintainer' })

  return (
    <div>
      <label>
        Name
        <input value={state.name} onInput={(event) => setState({ name: event.currentTarget.value })} />
      </label>
      <label>
        Role
        <input value={state.role} onInput={(event) => setState({ role: event.currentTarget.value })} />
      </label>
      <pre>{JSON.stringify(state, null, 2)}</pre>
    </div>
  )
}

API

TypeScript signature
export type SetState<S extends Record<string, any>> = <K extends keyof S>(state: Pick<S, K> | null | ((prevState: Readonly<S>) => Pick<S, K> | S | null)) => void;
declare const useSetState: <S extends Record<string, any>>(initialState: S | (() => S)) => [S, SetState<S>];
export default useSetState;
/

SSR considerations

This hook is safe to import during SSR. If your effect body touches the DOM, keep that work inside the effect callback.

Browser compatibility

Works in any modern browser supported by Preact.