Reactjs 如何在react中将对象列表添加到useState([])?

Reactjs 如何在react中将对象列表添加到useState([])?,reactjs,use-state,Reactjs,Use State,我正在尝试将[{},{},{}]添加到useState([]) const[messages,setMessages]=useState([]); const fetchMessage=(fetched_messages)=>{ if(获取的_消息){ setMessages([…消息,获取的消息]); } }; //fetched_messages=[{},{},{},{},{}]您的fetched_messages是一个数组,有状态的messages也是一个数组。要正确设置状态,请执行以下

我正在尝试将[{},{},{}]添加到useState([])

const[messages,setMessages]=useState([]);
const fetchMessage=(fetched_messages)=>{
if(获取的_消息){
setMessages([…消息,获取的消息]);
}
};

//fetched_messages=[{},{},{},{},{}]
您的
fetched_messages
是一个数组,有状态的
messages
也是一个数组。要正确设置状态,请执行以下操作:

setMessages(messages.concat(fetched_messages));

为什么会这样

在您的第一个代码中,这是因为您将响应数组作为一个项放入较大的数组中:

const fetched_messages = [{}, {}];
setMessages([...messages, fetched_messages])
// results in
setMessages([...messages, [{}, {}]])
// if messages is an empty array to start with:
setMessages([             [{}, {}]])
setMessages([[{}, {}]])
这不是你想要的

在第二个代码中,这是因为调用
setMessages
时,
messages
数组变量不会更改-state变量是一个不可变的
const
,因此只有最后的
setMessages
调用会导致在下次渲染时可见的更改

如果装载时,
fetchMessage
仅出现一次,则根本不需要使用现有状态,只需将新状态设置为响应数组:

setMessages(fetched_messages);
setMessages(fetched_messages);