У меня была эта ошибка в моем приложении, когда ввод терял фокус при обновлении в дереве DOM. Я знаю, довольно распространенная ошибка, однако я не смог найти свой конкретный случай, так как я правильно использовал ключи, я не создавал никаких компонентов в моем методе рендеринга и т. Д. И т. Д.
Я нашел решение для моего случая: хотя некоторые входные данные были обработаны с помощью list.map(...)
, уязвимый был добавлен как брат, рядом с этим массивом.
Пример можно найти здесь https://codesandbox.io/s/6y7ok9km3w,, но в итоге:
Что не делать:
<div>
{this.state.values.map((v, i) => <input value={v} key={i} />)}
<input
value=""
key={this.state.values.length}
onChange={this.onChange}
/>
</div>
Решение
<div>
{this.state.values
.map((v, i) => <input value={v} key={i} />)
.concat([
<input
value=""
key={this.state.values.length}
onChange={this.onChange}
/>
])}
</div>
Кажется, что реакция будет игнорировать элемент key
родного элемента только потому, что он не находится в массиве? Кто-нибудь знает, что там происходит?