Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用变量标识符反应更新处于状态的嵌套对象_Javascript_Reactjs - Fatal编程技术网

Javascript 使用变量标识符反应更新处于状态的嵌套对象

Javascript 使用变量标识符反应更新处于状态的嵌套对象,javascript,reactjs,Javascript,Reactjs,您好,我无法更新react中的嵌套对象状态。当我尝试这样做的时候,我从帕伦特那里得到了所有儿童未定义道具的错误。 这是我的密码: updateColumn(newSubject,dayId,order){ console.log("tu som"); console.log(newSubject); console.log(dayId); console.log(order); console.log(thi

您好,我无法更新react中的嵌套对象状态。当我尝试这样做的时候,我从帕伦特那里得到了所有儿童未定义道具的错误。 这是我的密码:

    updateColumn(newSubject,dayId,order){
        console.log("tu som");
        console.log(newSubject);
        console.log(dayId);
        console.log(order);
        console.log(this.state.schedule);
        //Problematic part:
        let newSchedule = this.state.schedule;
        newSchedule.days[dayId].slots[order] = newSubject;
        console.log("newSchedule");
        console.log(newSchedule);

        this.setState({schedule:this.state.schedule});
        console.log("this new state");
        console.log(this.state.schedule);
        //State changed but error shows
    }
试试这个:

this.setState({...this.state, schedule: {
  ...this.state.schedule,
  days: {
     ...this.state.schedule.days,
     [dayId]: dayId,
     slots: {
      ...this.state.schedule.days.slots,
      [order] : newSubject
   }
})
试试这个:

this.setState({...this.state, schedule: {
  ...this.state.schedule,
  days: {
     ...this.state.schedule.days,
     [dayId]: dayId,
     slots: {
      ...this.state.schedule.days.slots,
      [order] : newSubject
   }
})


你到底犯了什么错误?此外,您可能希望保持嵌套对象不变。现在您正在就地更改它,这可能会阻止React检测到更改并正确呈现它。SubjectColumn.js:27 Uncaught TypeError:无法读取UndeDefinit的属性“acronym”是我的子错误。它正在使用props.subject.acronym,但我正在更改所有日程状态。是否?您没有将明细表更改为新对象。您正在接受旧的计划,更改它,然后将计划设置回原来的状态。仍然在使用完全相同的JS对象。下面哈姆扎的回答显示了如何使用spread操作符以一种不可变的方式重建它。您实际遇到了什么错误?此外,您可能希望保持嵌套对象不变。现在您正在就地更改它,这可能会阻止React检测到更改并正确呈现它。SubjectColumn.js:27 Uncaught TypeError:无法读取UndeDefinit的属性“acronym”是我的子错误。它正在使用props.subject.acronym,但我正在更改所有日程状态。是否?您没有将明细表更改为新对象。您正在接受旧的计划,更改它,然后将计划设置回原来的状态。仍然在使用完全相同的JS对象。下面Hamza的回答显示了如何使用spread操作符以不变的方式重建它。这对数据的形状做出了假设。您不知道days是对象还是数组,插槽也是如此。另外,[daysId]键的值应该是天本身,而不是id。是的,我不知道数据的形状,这就是为什么我说尝试我的答案,希望天和槽是对象。但是谢谢你在最后对这个解决方案的评论我的代码有一个很大的问题。。。我把形状的数据在后。。。我创造了关于这个问题的新答案,因为我不确定这是否是你们向我提出的问题。。。days=>对象数组和对象插槽数组这对数据的形状进行了假设。您不知道days是对象还是数组,插槽也是如此。另外,[daysId]键的值应该是天本身,而不是id。是的,我不知道数据的形状,这就是为什么我说尝试我的答案,希望天和槽是对象。但是谢谢你在最后对这个解决方案的评论我的代码有一个很大的问题。。。我把形状的数据在后。。。我创造了关于这个问题的新答案,因为我不确定这是否是你们向我提出的问题。。。天数=>对象数组和插槽对象数组