Я пытаюсь понять, как работает React Hook API. Я пытаюсь добавить номер в список. Код, который я прокомментировал, то есть myArray.push ... похоже, не выполняет операцию, хотя приведенный ниже код работает нормально. Почему это так?
import React, {useState} from 'react'
export default () => {
const [myArray, setArray] = useState([1,2,3])
return (
<div>
{myArray.map((item=>{
return <li>{item}</li>
}))}
<button onClick = {()=>{
// myArray.push(myArray[myArray.length-1]+1)
// setArray(myArray)
setArray([...myArray, myArray[myArray.length-1]+1])
}}>Add</button>
</div>
)
}
myArray
этоthis.state.myArray
, и, как обычно, вам не следует изменять состояние, поэтому раньше вы никогда неthis.state.myArray.push(....)
, что также означает, что вам не следует пытатьсяmyArray.push
сейчас - person Isaac   schedule 19.02.2019[...myArray, myArray[myArray.length-1]+1] !== myArray
, что приведет к повторному рендерингу компонента. - person Tholle   schedule 19.02.2019===
сравнение под капотом, и, посколькуmyArray.push
просто добавляет еще один элемент в существующий массив, он не будет повторно визуализироваться.[...myArray, myArray[myArray.length-1]+1]
однако создает совершенно новый массив. Если вы будете придерживаться практического правила не изменять состояние напрямую, вы не столкнетесь с этими проблемами. - person Tholle   schedule 19.02.2019