Основной принцип ReactJS заключается в том, что только измененные объекты в DOM обновляются. Эта модульность дает вам все преимущества скорости, простоты и абстрактности - даже если ваш сайт содержит тысячи компонентов.
В вашем примере вы добавляете новый блок в DOM, и ни один из других блоков не изменяется, ReactJS проверяет это автоматически на каждом render()
.
Таким образом, ответ на ваш вопрос относительно прост: если вы хотите, чтобы другие ящики были перерисованы, вам нужно как-то изменить их. В противном случае ReactJS не поймет, что другие ячейки необходимо изменить. Самый простой способ добиться этого - использовать свойство key
, , см. Документацию :
Клавиши помогают React определить, какие элементы были изменены, добавлены или удалены. Необходимо дать ключи элементам в массиве, чтобы дать элементам устойчивую идентичность:
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li key={number.toString()}>
{number}
</li>
);
Теперь, если вы измените ключи при добавлении нового элемента в DOM, объекты будут переопределяется, потому что при изменении key
ReactJS понимает, что этот объект необходимо перерисовать. Вы также можете изменить другие атрибуты для повторного отображения объекта, но изменение key
является наиболее прямым способом.
Кроме того, вы также можете вызвать forceUpdate()
, , см. Документацию , но вам все равно нужно изменить разметку:
По умолчанию, когда состояние вашего компонента или реквизит изменяются, ваш компонент будет повторно визуализироваться. Если ваш метод render () зависит от некоторых других данных, вы можете указать React, что компонент нуждается в повторном рендеринге, вызвав forceUpdate ().
Вызов forceUpdate () вызовет render () для компонента , пропуская shouldComponentUpdate (). Это вызовет обычные методы жизненного цикла для дочерних компонентов, включая метод shouldComponentUpdate () каждого дочернего компонента. React все равно будет обновлять DOM, только если разметка изменится .
Обычно вы должны стараться избегать любого использования forceUpdate () и читать только из this.props и this.state в render ( ).