ReactJS动态更新状态

时间:2017-04-11 14:50:20

标签: javascript reactjs dynamic state

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

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

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

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

有什么想法吗?

编辑 - 搜索 -

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

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

    _.set(newState, statePath, inputValue);

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

1 个答案:

答案 0 :(得分:0)

以防有人遇到同样的问题......我按照@rauliyohmc建议并设法用lodash解决问题。使用的代码(比我想象的要简单得多)是:

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

    _.set(newState, statePath, inputValue);

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