lifeCycle
1. useOnMount
export function useOnMount(fn: () => void, destoryCallBack?: () => void) {
useEffect(() => {
fn();
if (destoryCallBack) {
return () => {
destoryCallBack();
};
}
}, []);
}
2. useOnUpdate
export function useOnUpdate(fn: () => void, dep?: any[]) {
const ref = useRef({fn, mounted: false});
ref.current.fn = fn;
useEffect(() => {
if (!ref.current.mounted) {
ref.current.mounted = true;
} else {
ref.current.fn();
}
}, dep);
}
3. useForceUpdate
export function useForceUpdate() {
const [, setValue] = useState(0);
return useCallback(() => {
setValue(val => (val + 1) % (Number.MAX_SAFE_INTEGER - 1));
}, []);
}
4. useHttp
export function useHttp<Req, Res, ResOrigin = Res>(
httpConfig: {
methods: NetMethods;
url: string;
params?: Req;
transform?: (p: ResOrigin) => Res;
succCallBack?: (p: Res) => void;
errorCallBack?: (p: any) => void;
},
isImmediately?: boolean
): [Res, (params: Req) => Promise<Res>] {
const [data, setData] = useState<Res>(null);
const http = (params: Req = httpConfig.params): Promise<Res> => {
return new Promise((resolve, reject) => {
net[httpConfig.methods]<Req, ResponseObj<Res>>(httpConfig.url, params).then(res => {
const resRes = httpConfig.transform ? httpConfig.transform((res.result as any)) : res.result;
setData(resRes);
httpConfig.succCallBack && httpConfig.succCallBack(resRes);
resolve(resRes);
}).then(err => {
httpConfig.errorCallBack && httpConfig.errorCallBack(err);
reject(err);
});
});
};
useOnMount(() => {
if (isImmediately) {
http(httpConfig.params);
}
});
return [
data,
http,
];
}
5. useStateRef
export function useStateRef<T>(initialState: T | (() => T)): [
T,
Dispatch<SetStateAction<T>>,
React.MutableRefObject<T>
] {
const refContainer = useRef<T>();
const [state, setState] = useState<T>(() => {
const value = isFunction(initialState) ? (initialState as any)() : initialState;
refContainer.current = value;
return value;
});
const setValue = useCallback(value => {
if (isFunction(value)) {
setState((prevState: T) => {
const newState = value(prevState);
refContainer.current = newState;
return newState;
});
} else {
setState(value);
refContainer.current = value;
}
}, []);
return [state, setValue, refContainer];
}