Szukaj…


Wprowadzenie

Klucze w reakcji służą do wewnętrznej identyfikacji listy elementów DOM z tej samej hierarchii.

Jeśli więc iterujesz po tablicy, aby wyświetlić listę elementów li, każdy z elementów li potrzebuje unikalnego identyfikatora określonego przez właściwość key. Zwykle może to być identyfikator elementu bazy danych lub indeks tablicy.

Uwagi

Używanie indeksu tablicy jako klucza nie jest generalnie zalecane, gdy tablica ma się zmieniać z czasem. Z dokumentów React:

W ostateczności możesz przekazać indeks elementu do tablicy jako klucz. Może to działać dobrze, jeśli elementy nigdy nie zostaną ponownie uporządkowane, ale zmiana kolejności będzie powolna.

Dobry przykład na ten temat: https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318

Korzystanie z identyfikatora elementu

Tutaj mamy listę rzeczy do zrobienia, które są przekazywane do rekwizytów naszego komponentu.

Każdy element do zrobienia ma właściwość text i id. Wyobraź sobie, że właściwość id pochodzi z magazynu danych zaplecza i jest unikalną wartością liczbową:

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

Ustawiamy kluczowy atrybut każdego iterowanego elementu listy na todo-${todo.id} , aby reakcja mogła go zidentyfikować wewnętrznie:

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

Korzystanie z indeksu tablicowego

Jeśli nie masz pod ręką unikalnych identyfikatorów bazy danych, możesz również użyć indeksu numerycznego swojej tablicy w następujący sposób:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow