Должен ли ключ элемента React находиться на прямом дочернем элементе?

#reactjs

#reactjs

Вопрос:

Допустим, что в моей функции рендеринга у меня есть итерация, подобная этой:

 {list.map((item) => (
  <Element key={item.key} item={item} />
)}
  

Я предполагаю, что для упрощения можно заставить сам компонент «Элемент» отображать key в своей функции рендеринга (в корневом элементе), чтобы я мог переписать итерацию следующим образом:

 {list.map((item) => (
  <Element item={item} />
)}
  

Но тогда предположим, что в каком-то конкретном случае мне нужно обернуть элемент в div следующим образом:

 {list.map((item) => (
  <div>
    <Element item={item} />
  </div>
)}
  

Теперь прямой дочерний элемент «массива узлов» больше не несет key prop!

Однако это больше не генерирует предупреждение в консоли.

Итак, мой вопрос: я делаю что-то, что не разрешено / неопределенное поведение? Должен ли я переместить key компонент «Элемент» во внешний div? Или это не имеет значения?

Комментарии:

1. Я скептически отношусь к тому, что это не выдает предупреждение о пропущенном ключе. Какую версию react вы используете?

2. «Я предполагаю, что для упрощения …» — нет, это не нормально. Посмотрите на reactjs.org/docs /.

3. Спасибо @jonrsharpe за ссылку. Супер полезно! Я думаю, вы можете сделать это ответом.

4. @azium Я использую React 16.12

Ответ №1:

странно, что вы не получаете предупреждение о пропущенном ключе, даже если думаете, что это не так, как вам нужно это делать. Поскольку @jonrsharpe отправляет React сообщение о том, что вам нужно поместить ключ, подобный вашему первому коду, вам не нужно делать это внутри элемента, это не очень хорошее поведение.