@oiiai/oiiai-taro-react
Version:
OiiaiUI is a miniprogram ui library for TaroJS
24 lines (18 loc) • 668 B
text/typescript
import { useEffect, useRef, useState } from "react";
// 自定义 Hook 实现带回调的 setState
const useCallbackState = <S>(initialState: S) => {
const [state, setState] = useState<S>(initialState);
const callbackRef = useRef<((state: S) => void) | null>(null);
const setStateWithCallback = (newState: S, callback?: (state: S) => void) => {
callbackRef.current = callback || null;
setState(newState);
};
useEffect(() => {
if (callbackRef.current) {
callbackRef.current(state);
callbackRef.current = null;
}
}, [state]);
return [state, setStateWithCallback];
};
export default useCallbackState;