实现useBoolean

608 阅读1分钟

自定义hooks

作为react的使用者,自定义hooks是常见的业务需求,小弟技术水平有限,只能先借花献佛聊下公司里大佬们封装的自定义hooks了

import { useMemo } from 'react';
import { useToggle } from '@pansy/use-toggle';

export interface Actions {
  setTrue: () => void;
  setFalse: () => void;
  set: (value: boolean) => void;
  toggle: () => void;
}

export function useBoolean(defaultValue = false): [boolean, Actions] {
  const [state, { toggle, set }] = useToggle(defaultValue);

  const actions: Actions = useMemo(
    () => {
      const setTrue = () => set(true);
      const setFalse = () => set(false);

      return {
        toggle,
        set: (v) => set(!!v),
        setTrue,
        setFalse,
      };
    },
    []
  );

  return [state, actions];
};

优雅的管理 boolean 值的 Hook。 useToggle的实现参见 juejin.cn/post/704708…

用法如下

import React from 'react';
import { Button, Switch } from 'antd';
import { useBoolean } from '@pansy/hooks';


export default () => {
  const [state, { toggle, setTrue, setFalse }] = useBoolean();


  return (
    <div>
      <p>
        <Switch checked={state} onChange={toggle} />
      </p>
      <p>
        <Button type="default" onClick={() => toggle()}>
          Toggle
        </Button>
        <Button type="dashed" onClick={setFalse} style={{ margin: '0 16px' }}>
          Toggle False
        </Button>
        <Button type="primary" onClick={setTrue}>
          Toggle True
        </Button>
      </p>
    </div>
  );
};

个人的分享记录,不喜勿喷。