useSetState
useSetState
是合并状态的 useState
,可用于管理复杂的 object。
类型声明
ts
declare function useSetState<S extends Record<string, any>>(
initialState: S | (() => S),
): [S, SetState<S>];
源码
ts
import { useState } from 'react';
import useMemoizedFn from '../useMemoizedFn';
import { isFunction } from '../utils';
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;
const useSetState = <S extends Record<string, any>>(
initialState: S | (() => S),
): [S, SetState<S>] => {
const [state, setState] = useState<S>(initialState);
const setMergeState = useMemoizedFn((patch) => {
setState((prevState) => {
const newState = isFunction(patch) ? patch(prevState) : patch;
return newState ? { ...prevState, ...newState } : prevState;
});
});
return [state, setMergeState];
};
export default useSetState;