ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL_200923(React Hook API)
    카테고리 없음 2020. 9. 24. 03:12

     

    useCallback

    const memoizedCallback = useCallback(
      () => {
        doSomething(a, b);
      },
      [a, b],
    );

    메모이제이션된 콜백을 반환합니다.

     

    인라인 콜백과 그것의 의존성 값의 배열을 전달하면 useCallback은 콜백의 메모이제이션된 버전을 반환합니다. 메모이제이션된 버전은 콜백의 의존성이 변경되었을 때에만 변경됩니다. 

     

    useCallback(fn, deps)은 useMemo(() => fn, deps)와 같습니다.

     

     

     

    useMemo

    const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

    메모이제이션된 값을 반환합니다.

     

    생성(create) 함수와 그것의 의존성 값의 배열을 전달합니다. useMemo는 의존성이 변경되었을 때에만 메모이제이션된 값만 다시 계산 합니다. 이 최적화는 모든 렌더링 시의 고비용 계산을 방지해줍니다. 

    useMemo로 전달된 함수는 렌더링 중에 실행됩니다. 그러므로 렌더링 중에 하지 않을 것을 이 함수 내에서 하지 마세요. 

    배열이 없는 경우 매 렌더링 때마다 새 값을 계산합니다.

    메모이제이션된 값들의 일부를 잊어버리고 다음 렌더링 시에 재계산하는 방법을 선택할 수 있을 것입니다.

     

     

    useRef

    const refContainer = useRef(initialValue);

     

    useRef는 전달된 인자(initialValue)로 초기화된 변경 가능한 ref 객체를  .current 프로퍼티에 반환합니다.

    function TextInputWithFocusButton() {
      const inputEl = useRef(null);
      const onButtonClick = () => {
        // `current` points to the mounted text input element
        inputEl.current.focus();
      };
      return (
        <>
          <input ref={inputEl} type="text" />
          <button onClick={onButtonClick}>Focus the input</button>
        </>
      );
    }

    본질적으로 useRef는 .current 프로퍼티에 변경 가능한 값을 담고 있는 상자와 같습니다.

    DOM에 접근하는 방법으로 refs가 친숙할 지도 모르지만 <div ref={myRef} />를 사용하여 React로 ref 객체를 전달한다면, React는 모드가 변경될 때마다 DOM 노드에 .current 프로퍼티를 설정할 것입니다.

     

    useRef()는 순수 자바스크립트 객체를 생성하기 때문에 어떤 가변값을 유지하는 데에 편리합니다. 

    useRef()와 {current: ...} 객체 자체를 생성하는 것의 유일한 차이점은 useRef() 는 매번 렌더링을 할 때 동일한 ref 객체를 제공하는 것 입니다. 또한 .current 프로퍼티를 변형하는 것이 리렌더링을 발생시키지 않습니다. 

     

     

     

    useImperativeHandle

    useImperativeHandle(ref, createHandle, [deps])

    useImperativeHandle은 ref를 사용할 때 부모 컴포넌트에 노출되는 인스턴스 값을 사용자화합니다.

    useImperativeHandle는 forwardRef와 같이 사용합니다.

     

    function FancyInput(props, ref) {
      const inputRef = useRef();
      useImperativeHandle(ref, () => ({
        focus: () => {
          inputRef.current.focus();
        }
      }));
      return <input ref={inputRef} ... />;
    }
    FancyInput = forwardRef(FancyInput);
    

     

     

     

     

     

     

     

     

     

    댓글

Designed by CHANUL