콜백 함수에서 전송 된 인수를 기반으로 동적으로 구성 요소 상태를 업데이트하려고합니다. 구성 요소가 valueChange('id', 1)
... this.state.contractLine.id
이 1
으로 업데이트되며 구성 요소가 보내는 경우 valueChange('innerLevel.name', 'newName')
this.state.contractLine.innerLevel.name
가 newName
ReactJS 상태를 동적으로 업데이트합니다.
에 업데이트됩니다 이것은 내가 사용하고 코드입니다 (하지만 그건 보내는 경우
그래서, 목표는 예상대로 작동하지 않음).
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);
}
아이디어가 있으십니까?
편집 --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