はじめに
このシリーズは、Reactの公式ページなどから特に重要と感じたトピックを選び出し、何度でも読み返せるよう簡潔にまとめたものです。
stateの保持と破棄
Reactは各コンポーネントごとにStateが保持され、レンダーツリーに沿ってstateを管理します。
コンポーネントが破棄されるとstateも破棄されます。
ただし、レンダリング時に同様なコンポーネントがあると判定された場合、stateは保持されることがあります。
stateが保持されるパターン
1.別々に記述していても保持されるパターン
同様なコンポーネントとみなされstateは保持されます。
{isFancy ? (
<Counter isFancy={true} />
) : (
<Counter isFancy={false} />
)}
2.構造が同じであるため保持されるパターン
リターン位置が違う場合も、構造が同じであればstateは保持されます。
if (isFancy) {
return (
<div>
<Counter isFancy={true} />
</div>
);
} else {
return (
<div>
<Counter isFancy={false} />
</div>
);
}
stateが破棄されるパターン
1.条件付きレンダリングの記述をわける
条件付きレンダリングを別々に記述すると、レンダリング処理が個別に行われ破棄されます。
<div>
{isPlayerA &&
<Counter person="Taylor" />
}
{!isPlayerA &&
<Counter person="Sarah" />
}
</div>
2.構造を変える
構造が違うとstateは破棄されます。
{isFancy ? (
<div>
<Counter isFancy={true} />
</div>
) : (
<Counter isFancy={false} />
)}
3.keyを使って各コンポーネントに明示的な識別子を付与する
同様な構成でもコンポーネントのkeyが違うとstateを破棄します。
return (
<div>
{isPlayerA ? (
<Counter key="Taylor" person="Taylor" />
) : (
<Counter key="Sarah" person="Sarah" />
)}
参考サイト
より詳しく学びたい方はこちら