Javascript 动态更新状态

Javascript 动态更新状态,javascript,reactjs,dynamic,state,Javascript,Reactjs,Dynamic,State,我试图根据回调函数上发送的参数动态更新组件状态 因此,目标是如果组件发送valueChange('id',1)this.state.contractLine.id将更新为1,如果组件发送valueChange('innerLevel.name','newName')this.state.contractLine.innerLevel.name将更新为newName 这是我正在使用的代码(但它没有像预期的那样工作) 以防有人有同样的问题。。。我遵照@rauliyohmc的建议,设法用lodash解

我试图根据回调函数上发送的参数动态更新组件状态

因此,目标是如果组件发送
valueChange('id',1)
this.state.contractLine.id
将更新为
1
,如果组件发送
valueChange('innerLevel.name','newName')
this.state.contractLine.innerLevel.name
将更新为
newName

这是我正在使用的代码(但它没有像预期的那样工作)


以防有人有同样的问题。。。我遵照@rauliyohmc的建议,设法用lodash解决了这个问题。使用的代码(比我想象的要简单得多)是:


快速查看您的代码,您似乎正在改变状态。罪魁祸首是
var newState=this.state
,它的作用是将
newState
指向同一对象引用。因此,当您执行
newState['contractLine']=stateBeingChanged
时,您正在变异
this.state
。而是在生成新对象之前执行
var newState=Object.assign({},this.state)
。如果有帮助,请告诉我
valueChange(statePath, inputValue) {
    var newState = this.state; 

    var stateBeingChanged = this.state['contractLine'];

    var pathList = statePath.split('.');
        for (var i = 0; i < pathList.length; i++) {
            var elem = pathList[i];
            stateBeingChanged = stateBeingChanged[elem];
        }

    stateBeingChanged = inputValue;

    newState['contractLine'] = stateBeingChanged;

    this.setState(newState);
}
valueChange(statePath, inputValue) {
    var newState = Object.assign({}, this.state['contractLine']);

    _.set(newState, statePath, inputValue);

    this.setState({contractLine: newState});
}
valueChange(statePath, inputValue) {
    var newState = Object.assign({}, this.state['contractLine']);

    _.set(newState, statePath, inputValue);

    this.setState({contractLine: newState});
}