Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンポーネントとレンダー

Avatar for nikawa2161 nikawa2161
June 17, 2025
2

 コンポーネントとレンダー

Avatar for nikawa2161

nikawa2161

June 17, 2025
Tweet

Transcript

  1. 1 2 3 4 5 6 7 InnerComponent (() {

    <InnerLog name="InnerComponent" />; }, [count]); innerRender (() { <InnerLog name="InnerRender" />; }, [count]); const return const return = => = => useCallback useCallback 1 2 3 4 5 6 7 8 9 10 11 12 13 ( < > < > { } <InnerComponent /> </ > < > { } { ()} </ > </ > ); return div section section section section div /* コンポーネントとして呼び出す */ /* 関数を実行して呼び出す */ innerRender 同じコンポーネント内
  2. 1 2 3 4 5 6 7 InnerComponent (() {

    <InnerLog name="InnerComponent" />; }, [count]); innerRender (() { <InnerLog name="InnerRender" />; }, [count]); const return const return = => = => useCallback useCallback 1 2 3 4 5 6 7 8 9 10 11 12 13 ( < > < > { } <InnerComponent /> </ > < > { } { ()} </ > </ > ); return div section section section section div /* コンポーネントとして呼び出す */ /* 関数を実行して呼び出す */ innerRender 同じコンポーネント内 1 2 3 4 5 6 InnerLog (({ name } { name }) { (() { . ( ${name} ); }, []); < >{name}</ >; }); const return div div = : : string => => console memo useEffect log ` rendered`
  3. 1 2 3 4 5 6 7 8 9 10

    11 12 13 ( < > < > { } <InnerComponent /> </ > < > { } { ()} </ > </ > ); return div section section section section div /* コンポーネントとして呼び出す */ /* 関数を実行して呼び出す */ innerRender 状態を更新すると ・<InnerComponent /> は新しいコンポーネントとして解釈 →再レンダリングと再マウントを行う ・innerRender() は要素を返す関数として解釈 →返された要素の再評価は発生せずメモ化された結果を再利用 1 2 3 4 5 6 7 InnerComponent (() { <InnerLog name="InnerComponent" />; }, [count]); innerRender (() { <InnerLog name="InnerRender" />; }, [count]); const return const return = => = => useCallback useCallback
  4. JSXでの評価の違い InnerComponent 1 <InnerComponent /> 1 React. (InnerComponent, ) createElement

    null innerRender 1 { ()} innerRender 1 React. (InnerLog, { name }) createElement : "InnerRender"