Array.push()
возвращает число, новую длину теперь модифицированного массива на месте.
useEffect(() => setList(list.push(newThing))) // list is now a number!!!
Вы превратили список в число, так что теперь для массива из 3 элементов (который когда-то был 2 элемента) вы будете звонить 3.map()
, а 3
не имеет метода карты.
Еще хуже, если вы просто наберете pu sh и сбросите ссылку, которую вы не обновите
useEffect(() => {
list.push(newThing)
setList(list) // won't update! list === list is true, and thus does not trigger render
})
Вы можете go обновить список несколькими способами, создав новый массив и передав его с конкатенацией
useEffect(() => setList(list.concat(newThing)) // works
или распространяя
useEffect(() => setList([...list, newThing])) // works
Как только это будет сделано, проверка не пройдет, чтобы увидеть, является ли переданный объект тем же значением. Это должно позволить запустить рендер и появиться ваши новые обновления.