Массивы изменчивы в javascript, поэтому, когда вы создаете переменную и указываете ее на массив (как в вашем примере)
var newArray = array
newArray на самом деле не скопируйте его экземпляр, вместо этого просто храните ссылку на него. Это можно увидеть в очень простом примере, сделанном в консоли браузера, который показан ниже
Когда вы изменяете массив в своем примере, нажимая новый переменная он просто добавит его в исходный массив, изменяя состояние и не вызывая рендеринга. Когда React выполняет согласование после вызова setArray с новым массивом, он видит, что массив (ссылка) одинаков и не вызывает повторного рендеринга.
Когда вы используете пример нотации распространения, вы создаете новый массив используя []
, просто синтактически c сахар для new Array
и выгрузки элементов из старого в новый. Когда он сравнивает старое состояние с новым и его новыми элементами, React видит разницу и перерисовывает ваш компонент.
Если вы все же предпочтете сделать это так, как вы изначально установили, вы можете использовать Функция массива .slice () для создания нового массива с данными, существующими в вызываемом массиве, поэтому он будет var newArray = array.slice()
. Если вы добавите элемент в новый массив и установите его состояние, он будет визуализирован.