Методы set*
для состояния являются асинхронными, поэтому, если вы попытаетесь получить доступ к listOfitems
сразу после вызова setListOfitems
, вы можете использовать старое значение, а не новое обновленное.
Вы может использовать отдельный метод useEffect
, который зависит от значения, установленного в первом (используйте второй параметр, например [listOfitems]
). Этот другой метод должен срабатывать после обновления.
Короче говоря, данные обновляются, но ваш console.log отображает старое значение до завершения обновления.
edit: Пример кода:
useEffect(()=>{
getListOfitems()
// console.log here may NOT show the new listOfitems value because
// setListOfitems is asynchronous, and getListOfitems may also be
}, []) // only loads on the initial mount
Я предполагаю, что getListOfitems
сначала будет извлекать данные из внешнего источника и вызывать setListOfitems
внутри него. Код в сообщении не показывает, что происходит.
Секунда useEffect
может выглядеть так:
useEffect(()=>{
// do something with listOfitems
}, [listOfitems]) // gets called every time listOfitems is updated