我有一个简单的问题,但我不确定如何继续。
这是我的初始状态:
getInitialState: function() {
return {
selector:{
params:{
platform:'BITSTAMP',
currency:'USD',
item:'BTC',
interval:'15m',
range:'1d'
}
},
platforms: [],
pairs: [],
allPlatforms: {},
range: ['12h','1d','3d','1w','2w','1m','3m','6m','1y','Max', 'Custom'],
interval: ['1m','15m','1h','6h','12h','24h']
}
},
假设我需要更改selector.params.platform
。如果我写:
this.setState({
selector: {
params: {
platform: "somenewplatform"
}
}
});
它将摧毁我只保留平台的其他参数。所以我正在做的是
var newState = this.state;
newState.selector.params.platform = "newplatform";
然后我setState({selector:newState});
这是正确的方法吗?知道newState.selector.params.platform = "newplatform";
意味着直接修改状态而不直接通过setState
,我不确定这是否正确。
因此,如果有人有更好的解决方案,我会非常好奇地阅读它。
答案 0 :(得分:1)
你不想做
var newState = this.state;
newState.selector.params.platform = "newplatform";
this.setState({selector:newState});
这会将this.state.selector
设置为您的整个状态对象。看起来你想要的是这个:
var newSelector = this.state.selector;
newSelector.params.platform = "newplatform";
this.setState({selector: newSelector});