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)
)
}