React SetState 不调用渲染
React SetState doesn't call render
我将函数发送到 callBack
的子组件。在父级中,我有一个带有 setState
方法的函数:
onInputUpdated(id){
var array = {};
let char = id.slice(-1);
console.log(this.state.states)
switch(char){
case 'a':
array[id] = this.getY(ReactDOM.findDOMNode(this.refs[id].refs.inp).value);
break;
case 'b':
array[id] = this.getX(ReactDOM.findDOMNode(this.refs[id].refs.inp).value);
break;
}
let oldStates = this.state.states;
oldStates[id] = array[id];
this.setState({
states: oldStates
});
console.log(oldStates);
}
其中 states
是一个对象。
在此之后,设置states
。我可以在下一个 callBack
中看到它,我在那里打印到控制台。但是,不会调用 render
方法。在 componentMount
期间,一切都正确呈现。
怎么办?谢谢。
当您执行 let oldStates = this.state.states;
时,您只是使 oldStates
变量成为对 this.state.states
的引用,因此您实际上是在调用 setState
之前更改状态。
尝试制作它的副本,例如 let oldStates = Object.assign({}, this.state.states
,或者如果您需要深度克隆,则使用 lodash 或类似的东西。
我想你正在设置它,然后又重新设置它。尝试创建一个全新的对象实例。这是使用 underscore.
的方法
首先请确保您运行满足以下条件。 . .
npm install --save underscore
然后导入下划线。 . .
import _ from 'underscore';
然后克隆对象。
let oldStates = _.clone(this.state.states);
我将函数发送到 callBack
的子组件。在父级中,我有一个带有 setState
方法的函数:
onInputUpdated(id){
var array = {};
let char = id.slice(-1);
console.log(this.state.states)
switch(char){
case 'a':
array[id] = this.getY(ReactDOM.findDOMNode(this.refs[id].refs.inp).value);
break;
case 'b':
array[id] = this.getX(ReactDOM.findDOMNode(this.refs[id].refs.inp).value);
break;
}
let oldStates = this.state.states;
oldStates[id] = array[id];
this.setState({
states: oldStates
});
console.log(oldStates);
}
其中 states
是一个对象。
在此之后,设置states
。我可以在下一个 callBack
中看到它,我在那里打印到控制台。但是,不会调用 render
方法。在 componentMount
期间,一切都正确呈现。
怎么办?谢谢。
当您执行 let oldStates = this.state.states;
时,您只是使 oldStates
变量成为对 this.state.states
的引用,因此您实际上是在调用 setState
之前更改状态。
尝试制作它的副本,例如 let oldStates = Object.assign({}, this.state.states
,或者如果您需要深度克隆,则使用 lodash 或类似的东西。
我想你正在设置它,然后又重新设置它。尝试创建一个全新的对象实例。这是使用 underscore.
的方法首先请确保您运行满足以下条件。 . .
npm install --save underscore
然后导入下划线。 . .
import _ from 'underscore';
然后克隆对象。
let oldStates = _.clone(this.state.states);