[react]Map関数を適用する際のKey props
Map関数の適用時のKey props
Map関数
Map関数は、JavaScriptで使用される高次関数の1つです.
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((number) => number * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
高次関数とは?高次関数とは、関数をパラメータとして渡したり返したりする関数です.
複数の構成部品をレンダリング
また、要素UIをレンダリングする反応器は、複数の要素をレンダリングするために使用することもできる.
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li>{number}</li>
);
上記のようにして作成し、素子を分離してpropsを伝達することでpropsの数を得ることができるスケールレンダリング、props値の入力作成など、さまざまな方法で構成部品をレンダリングできます.
ただし、上記の図に示すように、生成時に警告が表示され、リスト内の各項目にキーを追加するよう求められます.
Key props
Keyは、Reactが変更、追加、または削除するアイテムを特定するのに役立ちます.
ユニークな識別子なので、アレイ内部のレイヤーに割り当てる必要があります.
鍵を選択する最善の方法は、データのIDを鍵として使用することである.
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li>{number}</li>
);
安定したIDがない場合は、アイテムインデックスを鍵として使用できます.ただし、インデックスをキーとして使用するときに配列を再配置すると、構成部品の状態に関連する問題が発生する可能性があります.構成部品インスタンスはkeyに基づいて更新および再利用される.キーとしてインデックスを使用すると、アイテムの順序が変更されるとキーも変更されます.したがって、構成部品の状態が悪化したり、予期せぬ事態になる可能性があります.
インデックスをキーとして使用する問題は、次の条件を満たす場合にのみ発生しません.
JSXにmap()を含める
// JSX에 map() 포함시키기
function NumberList(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
<ListItem key={number.toString()}
value={number} />
);
return (
<ul>
{listItems}
</ul>
);
}
JSXを使用すると、括弧にすべての式を含めることができます.したがって,map()関数の結果を行内処理とすることができる. // JSX에 map() 인라인으로 처리
function NumberList(props) {
const numbers = props.numbers;
return (
<ul>
{numbers.map((number) =>
<ListItem key={number.toString()}
value={number} />
)}
</ul>
);
}
参考資料1. リストとキー
2. Index as a key is an anti-pattern
3. 子どもの再帰処理
Reference
この問題について([react]Map関数を適用する際のKey props), 我々は、より多くの情報をここで見つけました https://velog.io/@y_jem/리액트-Map함수-적용-시-Key-propsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol