У меня есть пользовательская ловушка React для моих компонентов с более сложным состоянием. По сути, это обычный хук useState
, но с двумя дополнительными функциями: он проверяет равенство и предотвращает повторный рендеринг, а также объединяет состояние вместо его замены. Мне нужно вернуть null
из setState
, чтобы отменить обновление состояния, но TypeScript не позволяет мне. Я получаю следующую ошибку:
Argument of type '(prevState: K) => (K & Partial<K>) | null' is not
assignable to parameter of type 'SetStateAction<K>'.
Type '(prevState: K) => (K & Partial<K>) | null' is not
assignable to type '(prevState: K) => K'.
Type '(K & Partial<K>) | null' is not assignable to type 'K'.
Type 'null' is not assignable to type 'K'.ts(2345)
Мой хук выглядит так:
export function useNestedState<K extends UnknownObject>( // UnknownObject = {[key: string]: any}
initialState: K,
): [K, (newState: Partial<K>) => void] {
const [state, setState] = useState<K>(initialState);
const setNestedState = useCallback((newState: Partial<K>) => {
setState((prevState) => {
return comparePartialObject(prevState, newState) // Returns `true` if equal
? null // Will cancel state update
: { ...prevState, ...newState };
});
}, []);
return [state, setNestedState];
}
Может кто-нибудь помочь мне решить эту ошибку?