Reactjs 将项目数组追加到处于React状态的项目数组

Reactjs 将项目数组追加到处于React状态的项目数组,reactjs,Reactjs,我初始化了如下状态: const [titles, setTitles] = useState([]) setTitles(titles => [...titles, data.titles]) 我正在将另一个项目数组数据添加到数组titles,循环如下: const [titles, setTitles] = useState([]) setTitles(titles => [...titles, data.titles]) 我也试过: setTitles([...titl

我初始化了如下状态:

const [titles, setTitles] = useState([])
setTitles(titles => [...titles, data.titles])
我正在将另一个项目数组
数据添加到数组
titles
,循环如下:

const [titles, setTitles] = useState([])
setTitles(titles => [...titles, data.titles])
我也试过:

setTitles([...titles, data.titles])

但这两种方法似乎都不起作用,因为循环完成后,当我在控制台中打印
标题时,会显示一个空数组。我在这里遗漏了什么?

在设置新状态时,不应直接使用以前的状态,因为状态更改是异步的。 另外,由于第二个参数(data.titles)是一个数组,因此也应该使用spread操作符对其进行迭代

setTitles(prevState => [...prevState, ...data.titles])
更简单的方法是使用array concat运算符

setTitles((prevState) => prevState.concat(data.titles));

这取决于
数据中的实际内容。。。它叫
标题
还是
标题
?它是一个数组本身还是另一个条目?你可能在寻找,但如果没有更多的细节,我无法确定。另一个重要的细节是“两者似乎都不起作用”的确切含义。它会抛出错误吗?数据是否不是您期望的格式?如果是这样,您会得到什么错误或格式?编辑后:看起来您可以执行
setTitles(titles.concat(data.titles))
。但是,“循环完成后”表示此处可能存在其他问题,因为在循环中设置状态将覆盖任何以前的状态更新,并且因为在下次渲染之前,您无法通过控制台日志状态查看新值。@ShubhamKhatri,实际上您是对的。在React-dev工具中,我可以看到状态正在更新,并且附加了值。您建议合并上一个状态和新数据的方式也适用于我。功能组件中的问题也与闭包有关,而不仅仅是异步行为。如果你对阅读感兴趣,我写了一篇短文。实际上这个问题已经得到了回答。它还提出了将新数据与prev状态合并的正确方法。这是另一篇文章中给出的示例:setMovies(prevMovies=>([…prevMovies,…result])@哦,好的。没有注意到这个评论