javascript - 在react/JS中映射数组和对象后如何设置State?

标签 javascript reactjs dictionary setstate

我有一个处于状态的患者数组。如果 patent.roomroomStates.room 匹配,那么我想将 patent.roomStatus 设置为 roomStates[key]。名称。我的功能如下,但我不明白为什么它不起作用。

Patient array

const patients = [
{name: "Jay”, room: "room01", roomStatus: ""}, 
{name: "Leo”, room: "room02", roomStatus: ""}, 
{name: "Jim", room: "room05", roomStatus: ""}
]
const  roomState = { 
room01: {type: "info", room: "room01", name: "Stopped"},
room02: {type: "normal",room: "room02", name: "InRoom"},
room05: {type: "normal", room: "room05",name: "InRoom"},
}
   handleRoomStateChange(roomStates) {

        Object.keys(roomStates).map((key) => {
            this.state.patients.map(patient => {

                if (patient.room === roomStates[key].room) {


                    this.setState({ ...patient, roomStatus: roomStates[key].name});
                }

            })

        });
    }

最佳答案

不要在每次循环迭代时设置状态,将数据保存到数组中,然后在循环执行完成后设置它:

handleRoomStateChange = roomStates => {
  const patients = Object.keys(roomStates).map(key => {
    return this.state.patients.map(patient => {
      if (patient.room === roomStates[key].room) {
        return {
          ...patient,
          roomStatus: roomStates[key].name
        };
      }
      return patient;
    });
  });

  this.setState({patients});
};

编辑:实际上返回一个嵌套数组,为了获得正确的数据结构,可以避免额外的map:

handleRoomStateChange = roomStates => {
  const patients = this.state.patients.map(patient => {
    const roomKey = Object.keys(roomStates).find(key => key === patient.room);
    return {
      ...patient,
      roomStatus: roomStates[roomKey].name
    }
  });
  this.setState({ patients });
}

关于javascript - 在react/JS中映射数组和对象后如何设置State?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58753445/

相关文章:

javascript - Angular 中的 HTML 片段在 View 中部分缺失

javascript - 如何解决 React Native 中的模块名称冲突

java - 如何更好地跟踪 Java 中的索引(相对于 Python)

python - 字典与Python

javascript - 无法从动态加载的javascript访问变量

javascript - 如何在 mustache 中呈现动态生成的 key

javascript - 使用 jQuery/Javascript 防止任何形式的页面刷新

reactjs - 谁能帮我解决 Material ui 风格定位问题

javascript - Redux 存储在 React 类组件中返回 null 值

ios - 在 Swift 中将整数映射到字符串