DEV Community

Chan
Chan

Posted on

react-simplikit의 유용한 hook들 소개

useBooleaState

useState()를 통해 boolean 상태를 관리한다면, useBooleanState()를 통해 boolean 값이 변할 때 어떤 영향이 발생하는지 맥락을 파악하기 좋다.

구현

function useBooleanState(initialValue: boolean){
  const [ booleanState, setBooleanState ] = useState(initialValue);

  const setTrue = useCallback(() => {
    setBooleanState(true);
  }, [ setBooleanState ]);


  const setFalse = useCallback(() => {
    setBooleanState(false);
  }, [ setBooleanState ]);

  return [ booleanState, setTrue, setFalse ];
}
Enter fullscreen mode Exit fullscreen mode

useToggle

useState()로 상태를 만들 때 boolean 값 전환이 toggle에만 관심있다면, useToggle을 사용해볼 수 있다.

구현

function useToggle(initialValue: boolean){
  const [ booleanState, setBooleanState ] = useState(initialValue);

  const toggleBooleanState = useCallback(() => {
    setBoolean((prev) => !prev);
  }, [ setBoolean ]);

  return [ booleanState, toggleBooleanState ];
}
Enter fullscreen mode Exit fullscreen mode

예시

const [ filterText, setFilterText ] = useState('');
const [ inStockOnly, toggleInStockOnly ] = useToggle(false);

return <SearchBar 
  filterText={filterText}
  onFilterTextChange={setFilterText}
  inStockOnly={inStockOnly} 
  onInStockOnlyToggle={toggleInStockOnly}
/>
Enter fullscreen mode Exit fullscreen mode

SwitchCase

조건부 렌더링을 해야하는데, 조건을 특정 변수/상수의 값에 따라 분기해야할 경우에 사용할 수 있다.

구현

function SwitchCase({ value, caseBy, defaultCase }) {
  const case = caseBy[value];

  if (render != null) {
    return <>{case()}</>
  }

  return defaultCase ? <>{defaultCase()}</> : null;
}
Enter fullscreen mode Exit fullscreen mode

예시


const environment = useEnvironment();

return <SwitchCase
  value={environment}
  caseBy={{
    desktop: () => <DesktopCard />
    tablet: () => <TabletCard />
    mobile: () => <MobileCard />
  }}
  defaultCase={() => throw new Error("unknown environment")}
/>
Enter fullscreen mode Exit fullscreen mode

Top comments (0)