Reactjs 使用react钩子usestate将状态中的现有对象替换为另一个对象

Reactjs 使用react钩子usestate将状态中的现有对象替换为另一个对象,reactjs,Reactjs,我有下面的代码,它应该检查一个对象是否存在于状态中,并替换它,如果不存在,则将其附加到状态中。到目前为止,附加到状态可以正常工作,但在替换对象时,UI不会相应地更新 const [roomData, setRoomData] = useState([]); ............. onSelectRoom={(room) => { let roomIndex = roomData.findIndex( (room) => room.roomId == item.id

我有下面的代码,它应该检查一个对象是否存在于状态中,并替换它,如果不存在,则将其附加到状态中。到目前为止,附加到状态可以正常工作,但在替换对象时,UI不会相应地更新

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]);