0
コールバック関数で送信された引数に基づいてコンポーネントの状態を動的に更新しようとしています。ReactJSの状態を動的に更新する
ので、部品が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);
}
EDIT --SOLVED--私は@rauliyohmc
アドバイスに従い、lodash
の問題を解決するために管理し、誰かが同じ問題を抱えているだけの場合には
...
。 (私が今まで思ったよりもはるかに簡単な)使用 コードはでした:valueChange(statePath, inputValue) {
var newState = Object.assign({}, this.state['contractLine']);
_.set(newState, statePath, inputValue);
this.setState({contractLine: newState});
}
すぐにあなたのコードを見て、それはあなたが状態を突然変異させているようです。原因は、 'newState = this.state'であり、' newState'を同じオブジェクト参照に指定するという効果があります。したがって、 'newState ['contractLine'] = stateBeingChanged'を実行すると、あなたは' this.state'に突然変異を起こしています。代わりに、新しいオブジェクトを生成する前に 'var newState = Object.assign({}、this.state)'を実行してください。それが役に立ったら教えてください – rauliyohmc