Reactjs 反应设置状态更改状态中的不同对象

Reactjs 反应设置状态更改状态中的不同对象,reactjs,redux,Reactjs,Redux,这是组件的初始状态 this.state = { date: "", students: "", attendance: {} } 在ComponentDidMount上,我从一个减速机中获取日期和学生数组 componentDidMount() { const { date, students } = this.props; const todayDate = this.getFormattedDate(date); this.setState(prev

这是组件的初始状态

this.state = {
  date: "",
  students: "",
  attendance: {}
}
在ComponentDidMount上,我从一个减速机中获取日期和学生数组

componentDidMount() {
    const { date, students } = this.props;
    const todayDate = this.getFormattedDate(date);

    this.setState(prevState => ({
      date: todayDate,
      students,
      attendance: {
        ...prevState.attendance,
        [todayDate]: students
      }
    }), () => console.log('CDM', this.state));
}
我有一个复选框,当触摸该复选框时,该复选框应更新某个特定学生的
出勤率[todayDate]
,并更新属性
已选中

在render中,我映射出勤率[date]并返回JSX

<CheckBox
   checked={student.checked}
   onPress={() => this.takeAttendance(student.id)}
   containerStyle={styles.checkboxStyle}
/>
所以它工作正常。考勤[date]中的学生的属性
checked
正在更改,但它也会更改学生状态中的选中值。我不明白为什么它也在改变学生的状态,而不仅仅是出勤[日期]


添加视频供参考

尝试检查深度克隆对象


嗯,看起来一切正常,可以尝试将
this.state.date
寻址到
prevState.date

attendance: {
        ...prevState.attendance,
        [prevState.date]: prevState.attendance[prevState.date].map(
          obj => (obj.id === id ? Object.assign(obj, { checked: !obj.checked }) : obj)
        )
      }
编辑:
此.setState(prevState=>可能有问题({date:todayDate,students,
。您将学生设置为与
[todayDate]:students
相同。
向每个学生添加已检查的属性,并将其存储在考勤[日期].

不,我的students属性仍在更改。我要添加一个fiddle是的,那太好了。我无法添加fiddle,因为它是react原生项目,但我添加了一个显示问题的视频。students数组值没有更改,但正如您在视频中看到的,它正在更改。我的代码与此完全相同,但我是ge从redux中删除状态,然后保存到组件状态。好的,所以我评论了我的componentDidMount,并直接在组件状态中添加值,而不是从redux中获取,并且工作正常。你知道为什么吗?
attendance: {
        ...prevState.attendance,
        [prevState.date]: prevState.attendance[prevState.date].map(
          obj => (obj.id === id ? Object.assign(obj, { checked: !obj.checked }) : obj)
        )
      }