[react]リストとKey


次にmap()関数を使用して、数値配列の値を2倍にし、返された配列を2倍の変数に割り当て、ログを表示します.
let numbers = [1,2,3,4,5];
let doubled = numbers.map((numbers) => numbers * 2);
console.log(doubled);
「React」では、配列を「エンティティ」リストに作成する方法はほぼ同じです.

複数の構成部品をレンダリング


JSXには、カッコ{}でエンティティセットを含めることができます.
番号付けスキームを繰り返します.空母ごとに<li>エリーを返し、その結果をlistitemsに保存します.
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
  <li>{number}</li>
);
<ul>のレイヤーにlistItems配列を再度含め、DOMにレンダリングします.
ReactDOM.render(
  <ul>{listItems}</ul>,
  document.getElementById('root')
);

既定のリスト構成部品


通常、リストは構成部品でレンダリングされます.
前述の例では、番号配列を順番のないシンボルリストを出力する素子として再パッケージすることができる.
function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li>{number}</li>
  );
  return (
    <ul>{listItems}</ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);
NumberList関数はnumbersとしてpropsを受け入れてレンダリングします.
上記のコードを実行すると、リスト内の各項目にキーを追加する必要があることを示す警告が表示されます.keyは、別名リストを作成するときに含める必要がある特殊な文字列ツリーです.
function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li key={number.toString()}>
      {number}
    </li>
  );
  return (
    <ul>{listItems}</ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

Key


Keyは、Reactが変更、追加、または削除するアイテムを決定するのに役立ちます.レイヤが信頼性の高い一意性を確保するには、アレイ内のレイヤに鍵を割り当てる必要があります.
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
  <li key={number.toString()}>
    {number}
  </li>
);
キーを選択する最善の方法は、リスト内の他のアイテム間でアイテムを一意に識別できる文字列を使用することです.ほとんどの場合、鍵としてIDが使用されます.
const todoItems = todos.map((todo) =>
  <li key={todo.id}>
    {todo.text}
  </li>
);
利用可能なIDがない場合はindexを鍵として使用できますが、推奨されません.indexを使用すると、パフォーマンスの低下やステータスの問題が発生する可能性があります.
リスト項目にキーが明示的に指定されていない場合、reactはデフォルトでキーとしてインデックスを使用します.
function ListItem(props) {
  // 맞습니다! 여기에는 key를 지정할 필요가 없습니다.
  return <li>{props.value}</li>;
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    // 맞습니다! 배열 안에 key를 지정해야 합니다.
    <ListItem key={number.toString()} value={number} />
  );
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

Keyは兄弟の間で唯一の値でなければならない。


鍵は、アレイ内の兄弟間で一意である必要があります.範囲全体で一意である必要はありません.2つの異なる配列を作成する場合は、同じ鍵を使用できます.
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>
  );
}

const posts = [
  {id: 1, title: 'Hello World', content: 'Welcome to learning React!'},
  {id: 2, title: 'Installation', content: 'You can install React from npm.'}
];
ReactDOM.render(
  <Blog posts={posts} />,
  document.getElementById('root')
);
Reactでは、Keyはヒントを提供するが、素子としては伝達されない.構成部品がKeyと同じ値を必要とする場合は、別の名前のpropに明確に渡されます.
const content = posts.map((post) =>
  <Post
    key={post.id}
    id={post.id}
    title={post.title} />
);
キー値に{post.id}があり、idに{post.id}がある場合は問題ありません.