common-hook
Version:
提供项目中常用的 React Hooks
25 lines (24 loc) • 918 B
JavaScript
import { useMemo, useState } from "react";
/**
* @name 用于在两个状态值间切换Hook
* @description 默认为 boolean 切换,基础用法与 useBoolean 一致
* @example
* const [state, { toggle, setLeft, setRight }] = useToggle()
*/
export const useToggle = (defaultValue = false, reverseValue) => {
const [state, setState] = useState(defaultValue);
const actions = useMemo(() => {
const reverseValueOrigin = (reverseValue === undefined ? !defaultValue : reverseValue);
const toggle = () => setState((s) => s === defaultValue ? reverseValueOrigin : defaultValue);
const set = (value) => setState(value);
const setLeft = () => setState(defaultValue);
const setRight = () => setState(reverseValueOrigin);
return {
toggle,
set,
setLeft,
setRight
};
}, []);
return [state, actions];
};