Sök…


Introduktion

Nycklar som reagerar används för att identifiera en lista med DOM-element från samma hierarki internt.

Så om du itererar över en matris för att visa en lista med li-element, behöver varje av elementen en unik identifierare som anges av nyckelegenskapen. Detta kan vanligtvis vara id för ditt databasobjekt eller index för arrayen.

Anmärkningar

Att använda arrayindex som nyckel rekommenderas vanligtvis inte när matrisen kommer att förändras över tid. Från React Docs:

Som en sista utväg kan du passera objektets index i matrisen som en nyckel. Det kan fungera bra om objekten aldrig sorteras om, men omordningarna kommer att vara långsamma.

Ett bra exempel på detta: https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318

Använda id för ett element

Här har vi en lista med todo-objekt som skickas till rekvisita för vår komponent.

Varje todo-objekt har en text- och ID-egenskap. Föreställ dig att ID-egenskapen kommer från en backend-datastore och är ett unikt numeriskt värde:

todos = [
  {
    id: 1,
    text: 'value 1'
  },
  {
    id: 2,
    text: 'value 2'
  },
  {
    id: 3,
    text: 'value 3'
  },
  {
    id: 4,
    text: 'value 4'
  },
];

Vi ställer in nyckelattributet för varje itererat listelement till todo-${todo.id} så att reaktionen kan identifiera det internt:

render() {
  const { todos } = this.props;
  return (
    <ul>
      { todos.map((todo) =>
        <li key={ `todo-${todo.id}` }>
          { todo.text }
        </li>
      }
    </ul>
  );
}

Använda arrayindex

Om du inte har unika databas-id till hands kan du också använda det numeriska indexet för din array på följande sätt:

render() {
  const { todos } = this.props;
  return (
    <ul>
      { todos.map((todo, index) =>
        <li key={ `todo-${index}` }>
          { todo.text }
        </li>
      }
    </ul>
  );
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow