Reactjs 使用react钩子usestate将状态中的现有对象替换为另一个对象
我有下面的代码,它应该检查一个对象是否存在于状态中,并替换它,如果不存在,则将其附加到状态中。到目前为止,附加到状态可以正常工作,但在替换对象时,UI不会相应地更新Reactjs 使用react钩子usestate将状态中的现有对象替换为另一个对象,reactjs,Reactjs,我有下面的代码,它应该检查一个对象是否存在于状态中,并替换它,如果不存在,则将其附加到状态中。到目前为止,附加到状态可以正常工作,但在替换对象时,UI不会相应地更新 const [roomData, setRoomData] = useState([]); ............. onSelectRoom={(room) => { let roomIndex = roomData.findIndex( (room) => room.roomId == item.id
const [roomData, setRoomData] = useState([]);
.............
onSelectRoom={(room) => {
let roomIndex = roomData.findIndex(
(room) => room.roomId == item.id
);
roomData[roomIndex]
? (roomData[roomIndex] = room)
: setRoomData([...roomData, room]);
setRoomTotals([]);
}}
它没有正确更新,因为您正在直接改变状态。您需要复制并更改状态,然后更新状态,如:
const newState = [...roomData];
newState[roomIndex] = room;
setRoomData(newState);
或者您可以尝试以下方法:
roomData[roomIndex] ? setRoomData(roomData.map((data,i)=>{
if(i === roomIndex){
return room
}
return data;
}) : setRoomData([...roomData, room]);