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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for nikawa2161 nikawa2161
June 17, 2025
13

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

Avatar for nikawa2161

nikawa2161

June 17, 2025

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"