反应更改状态嵌入对象

时间:2015-09-02 16:26:42

标签: reactjs

我有一个简单的问题,但我不确定如何继续。

这是我的初始状态:

 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,我不确定这是否正确。

因此,如果有人有更好的解决方案,我会非常好奇地阅读它。

1 个答案:

答案 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});