[(チャレンジ)[React]ステータス、Props、Event]-5
タスク5)map関数を適用するときにキーアイテムを付与する理由
map 함수 적용시 key props를 부여하는 이유
にブログを書いてください.タスク4などのコンポーネントを使用してmap関数を実行すると、リスト内の各項目にキーを追加する必要があることを示す警告が表示されます.
key
keyは、別名リストを作成するときに含める必要がある特殊な文字列ツリービューです.
keyは、reactが変更、追加、または削除するアイテムを決定するのに役立ちます.
keyは、安定した一意性を確保するために、アレイ内の領域に指定する必要があります.<li key = {index}>내용 </ㅣㅑ>
この形で使います.特にmapを使用する場合.
しかし、一つ注意事項があります.注意事項は最後に検討する.
構成部品の使用時にmap関数でキーを使用する
前述したように、keyはアレイ内の領域に指定する必要があります.
サブエレメントは再使用に使用されますが、サブエレメントではkeyは使用できません.
無効な使用例
function 자식 컴포넌트 (props) {
const value = props.value;
return (
<li key={value.toString()}>
{value}
</li>
);
}
サブ構成部品では使用できません.
子構成部品は親値で使用する必要があります.
正しい例
function 부모 컨포넌트(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
<자식 컨포넌트 key = {number.toString()} value={number} />
);
return (
<ul>
{listItems}
</ul>
);
}
また、2つの異なる配列を作成する場合、keyは同じキーを使用することもできます.
function Blog(props) {
const sidebar = (
<ul>
{props.posts.map((post) =>
<li key={post.id}> //같은 키
{post.title}
</li>
)}
</ul>
);
const content = props.posts.map((post) =>
<div key={post.id}> //같은 키
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
return (
<div>
{sidebar}
<hr />
{content}
</div>
);
}
注意事項
リアクターはstateで変化した部分だけをキャプチャして再レンダリングします.
配列に要素を追加すると、リアクターは配列の前にバイオリンを再レンダリングしますか?それともバイオリンのみを再レンダリングしますか?
配列のキー値が一意に渡されると、要素は1つだけレンダリングされます.
リアクターは、既存のキー値を新しく追加したキー値と比較して、新しく変更した値を追加およびレンダリングします.
例として、3つの値があると思います.stateを使用して、stateを使用して例を示します.
state値がオブジェクトが存在する配列であると仮定します.[
{id:0, content:'hello'}
{id:1, content:'hello'}
{id:2, content:'hello'}
]
ここに{id:4,内容:"hello 4"}を追加
次に、反応器は、前の値を現在の値と比較する.では、キー値がidであれば、内容は同じで、追加ではなくid:4値を追加します.これだけ買ってあげます.
なぜmapを使用するときにキー値をindexとして提供できないのか
以上のことを考慮すると,map関数を用いる場合,indexをキー値として与えることはできないことが分かった.
key値をindexとすると、key値をidとする場合とは異なり、その値が先頭に表示されます.key: 0, {id:4, content:'ya!'},
key: 1, {id:0, content:'moya'},
key: 2, {id:1, content:'holly'},
key: 3, {id:2, content:'monya'},
key: 4, {id:3, content:'hulkhulk'}
反応が判断されると、マッチングが変わったと考えられます.
その結果、作業効率が低下し、反応剤が使用できないという利点がある.
したがって、ステータスで配列を管理する場合は、mapを使用するときにキーワードインデックスを使用しないでください.
配列の先頭または中央に新しいデータを入力すると、その部分はスナップできません.
使用したい場合は、データが変化しない場合に使用することをお勧めします.
Reference
この問題について([(チャレンジ)[React]ステータス、Props、Event]-5), 我々は、より多くの情報をここで見つけました
https://velog.io/@qqbck123/과제-React-State-Props-Event-5
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function 자식 컴포넌트 (props) {
const value = props.value;
return (
<li key={value.toString()}>
{value}
</li>
);
}
function 부모 컨포넌트(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
<자식 컨포넌트 key = {number.toString()} value={number} />
);
return (
<ul>
{listItems}
</ul>
);
}
function Blog(props) {
const sidebar = (
<ul>
{props.posts.map((post) =>
<li key={post.id}> //같은 키
{post.title}
</li>
)}
</ul>
);
const content = props.posts.map((post) =>
<div key={post.id}> //같은 키
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
return (
<div>
{sidebar}
<hr />
{content}
</div>
);
}
[
{id:0, content:'hello'}
{id:1, content:'hello'}
{id:2, content:'hello'}
]
key: 0, {id:4, content:'ya!'},
key: 1, {id:0, content:'moya'},
key: 2, {id:1, content:'holly'},
key: 3, {id:2, content:'monya'},
key: 4, {id:3, content:'hulkhulk'}
Reference
この問題について([(チャレンジ)[React]ステータス、Props、Event]-5), 我々は、より多くの情報をここで見つけました https://velog.io/@qqbck123/과제-React-State-Props-Event-5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol