cossack910 / reactAd

レンダリング、CSS、ルーティング
0 stars 0 forks source link

再レンダリング #1

Open cossack910 opened 11 months ago

cossack910 commented 11 months ago

タイミング

親A->子B->孫C

Bが再レンダリングされた時、その子Cも再レンダリングされる。親Aはスキップ
cossack910 commented 11 months ago

memo

親コンポーネントが再レンダリングされた時に子コンポーネントに再レンダリングをスキップできる。 不要なレンダリングがなくなるのでパフォーマンス最適化につながる。

export const ChildArea: React.FC<ChildAreaProps> = memo((props) => {
    const {open} = props;
    return(
        <>
        {
            open ? (
                <div>
                    <p>子コンポーネント</p>
                </div>

            ) : null
        }
        </>
    );
});
cossack910 commented 11 months ago

useCallback

親コンポーネントで定義したアロー関数をpropsとして、子コンポーネントに渡すと親コンポーネントが再レンダリングされた時に新しい関数として再生成されるため、memo化されている子コンポーネント側でも再レンダリングされてしまう。 この防止策として本関数を使用する。

子コンポーネントにpropsとして渡しているアロー関数に使う

  const onClickClose = useCallback(() => setOpen(false), [setOpen]);
cossack910 commented 11 months ago

useMemo

変数のメモ化

const temp = useMemo(() => 1+3, []);