React Hooks 的实现 - useBoolean

Published on
138 Words
Authors

实现需求

实现一个支持在两个 Boolean 值状态之间切换的 hook.

实现思路

入参与出参的设计

提供如下接口:

function useBoolean(initialValue?: boolean): [boolean, (value?: boolean) => void]

代码设计

提供一个 toggle 方法,通过判断是否传值来进行更新。

  • 若调用时没有传值,则将当前值取反 !prevValue
  • 若调用时有传值,则将当前值设置为传入值
function useBoolean(initialValue: boolean = false) {
  const [value, setValue] = useState<boolean>(initialValue)

  const toggle = useCallback((value?: boolean) => {
    if (typeof value === 'undefined') {
      setValue((prevValue) => !prevValue)
    } else {
      setValue(value)
    }
  }, [])

  return [value, toggle]
}