File size: 471 Bytes
05c5ed5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { useMemo, useState } from "react";

export const useObjectState = <T extends Record<string, any>>(
  initialState: T,
) => {
  const [state, setState] = useState<T>(initialState);

  const dispatch = useMemo(() => {
    return (value: Mutate<T>) => {
      setState((prev) => {
        const newState = typeof value === "function" ? value(prev) : value;
        return { ...prev, ...newState };
      });
    };
  }, []);

  return [state, dispatch] as const;
};