gpt4 book ai didi

javascript - react 形式 onChange->setState 落后一步

转载 作者:IT王子 更新时间:2023-10-29 03:09:16 24 4
gpt4 key购买 nike

我在构建 webapp 时遇到了这个问题,我在这个 jsfiddle 中复制了它.本质上,我希望每次输入内容时调用 this.setState({message: input_val}) 输入,然后将其传递给父 App 类,然后将消息重新呈现到消息类。然而,输出似乎总是比我实际键入的内容晚一步。 jsfiddle 演示应该是不言自明的。我想知道我是否做错了提示。

html

<script src="http://facebook.github.io/react/js/jsfiddle-integration.js"></script>
<div id='app'></div>

js

var App = React.createClass({
getInitialState: function() {
return {message: ''}
},
appHandleSubmit: function(state) {
this.setState({message: state.message});
console.log(this.state.message);
},
render: function() {
return (
<div className='myApp'>
<MyForm onChange={this.appHandleSubmit}/>
<Message message={this.state.message}/>
</div>
);
}
});

var MyForm = React.createClass({
handleSubmit: function() {
this.props.onChange(this.state);
},
handleChange: function(e) {
console.log(e.target.value);
this.setState({message: e.target.value});
this.handleSubmit();
},
render: function() {
return (
<form className="reactForm" onChange={this.handleChange}>
<input type='text' />
</form>
);
}
});

var Message = React.createClass({
render: function() {
return (
<div className="message">
<p>{this.props.message}</p>
</div>
)
}
});

React.render(
<App />,
document.getElementById('app')
);

最佳答案

setState 的调用不是同步的。它创建了一个“挂起的状态转换”。 (有关详细信息,请参阅 here)。您应该明确传递新的 input 值作为引发事件的一部分(例如您示例中的 handleSubmit)。

参见 this示例。

handleSubmit: function(txt) {
this.props.onChange(txt);
},
handleChange: function(e) {
var value = e.target.value;
this.setState({message: value});
this.handleSubmit(value);
},

关于javascript - react 形式 onChange->setState 落后一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com