Str*_*ask 10 javascript reactjs
我正在将Numbers组件中的数字值发送到Main组件.一切正常,直到我将主组件中的值设置为该组件的状态.
var Numbers = React.createClass({
handleClick: function(number){
this.props.num(number)
},
render: function(){
return (
<div>
<button onClick={this.handleClick.bind(null, 1)}>1</button>
<button onClick={this.handleClick.bind(null, 2)}>2</button>
<button onClick={this.handleClick.bind(null, 3)}>3</button>
</div>
)
}
})
var Main = React.createClass({
getInitialState: function(){
return {
number: 0
}
},
handleCallback: function(num){
console.log("number is right here: " + num);
this.setState({
number: num
})
console.log("but wrong here (previous number): " + this.state.number)
},
render: function() {
return (
<Numbers num={this.handleCallback} />
//<SomeComponent number={this.state.number} />
)
}
});
React.render(<Main />, document.getElementById('container'));
Run Code Online (Sandbox Code Playgroud)
它为什么会这样?其次console.log在handleCallback功能打印之前的数量,而不是它的数量num参数.我需要正确的号码才能进入我的状态,因为我将立即将其作为我的SomeComponent组件中的道具发送.
Mic*_*ker 20
来自文档:
setState()不会立即改变this.state,但会创建挂起状态转换.调用此方法后访问this.state可能会返回现有值.无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升.
如果要在调用后打印更改setState,请使用可选的回调参数:
this.setState({
number: num
}, function () {
console.log(this.state.number);
});
Run Code Online (Sandbox Code Playgroud)