如何在React中复制对象之间的嵌套状态
How to copy nested state between objects in React
在react应用程序中,我的状态如下:
dates: {"2015-11-20":{
"13:00":{...},
"14:00":{...}},
"2015-11-21":{
"18:00":{...},
"19:00":{...}}}
我在更新状态时遇到了一个问题——我的用例是,我希望用户能够通过UI将所有时间(例如,下午1点和2点)复制到其他日期,并相应地更新状态。
到目前为止,我所有的尝试都以引用为结果,在引用中,单独的对象变成链接的,对其中一个对象的任何更新都会导致对另一个的更新。
产生破坏行为的示例代码:
copyTimes: function() {
var keys = [];
Object.keys(this.state.dates).map(function(key) {
keys.push(key);
});
for(var i in keys) {
this.state.dates[keys[i]] = this.state.dates[this.state.selectedDate];
}
this.setState({dates: this.state.dates});
}
我认为我可能需要使用react加载项"更新"来解决此问题,根据https://facebook.github.io/react/docs/update.html
但是我不能完全理解我需要采取的语法方法。我如何使正确的更新将一个日期的内容"复制"到另一个日期:"2015-11-20",例如上例中的2015-11-21?
编辑根据(在评论中指出):在JavaScript中深度克隆对象的最有效方法是什么?
copyTimes: function() {
var keys = [];
var tempStart = JSON.parse(JSON.stringify(this.state.dates));
Object.keys(this.state.dates).map(function(key) {
keys.push(key);
});
for(var i in keys) {
tempStart[keys[i]] = JSON.parse(JSON.stringify(this.state.dates[this.state.selectedDate]));
}
this.setState({dates: tempStart});
},
上面的效果不错,但非常难看。有更好的方法吗?
copyTimes: function() {
var keys = [];
Object.keys(this.state.dates).map(function(key) {
keys.push(key);
});
var newDates = Object.assign({}, this.state.dates);;
for(var i in keys) {
newDates[keys[i]] = this.state.dates[this.state.selectedDate];
}
this.setState({dates: newDates});
}
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 可以简化嵌套的延迟Q Promises解析吗
- 用于搜索的聚合物嵌套绑定
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- d3中堆栈函数和嵌套函数之间的差异
- 如何打印嵌套对象的所有值
- JavaScript 中的嵌套函数和 “this” 关键字
- 设置嵌套对象属性的更好方法
- querySelector/getElementByClassName嵌套项的顺序
- 猫鼬在特定记录中查找嵌套记录
- 访问嵌套JSON对象的键,其中键是动态的
- D3嵌套组作为x轴
- JavaScript中的嵌入循环和嵌套循环之间有区别吗
- 如何在两个大括号之间找到代码,尊重嵌套
- 在指令和嵌套指令之间共享模型
- 如何在嵌套指令之间共享变量
- 如何在React中复制对象之间的嵌套状态
- 如何在现有的父指令元素和子指令元素之间动态嵌套指令元素
- 定义本地web应用程序和CDN之间的嵌套依赖关系