当前位置: 首页 > 面试题库 >

反应形式onChange-> setState落后一步

刘野
2023-03-14
问题内容

我在构建webapp时遇到了这个问题,并在jsfiddle中复制了它。本质上,this.setState({message: input_val})每次输入内容时,我都希望调用一个输入,然后将其传递到父App类中,然后将其重新呈现到Message类中。但是输出似乎总是比我实际输入的内容落后一步。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不同步。它创建一个“待处理状态转换”。(有关更多详细信息,请参见此处)。您应该input在引发事件的过程中显式传递新值(例如handleSubmit您的示例中)。

请参阅此示例。

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


 类似资料:
  • 问题内容: 我有以下代码片段: 我将如何使用上面的代码来设置每个键的状态。 这是初始状态: 问题答案: 基本规则是: 我们可以使用 计算属性名称 概念,并使用任何 js表达式 动态计算对象属性名称。为此,我们需要将表达式放在里面。 像这样: 解: 按照您发布的代码,你需要把里面,就像这样: 或者我们可以先创建该对象,然后将该对象传递给函数,如下所示: 另外,您不需要。您可以直接使用新值更新状态变量

  • 这是初始状态:

  • 问题内容: 我目前有一个简单的react应用程序,无法获得这些onchange事件来激发我的生命。 有趣的是,当我使用时,会触发事件,但函数中的ev变量不正确。 问题答案: 尝试: 要么: 代替:

  • 问题内容: 所以我有这个: newDealersDeckTotal只是一个数字数组,例如,但是没有给出正确的总数,但是呢?我什至设置了超时延迟,以查看是否可以解决问题。任何明显的还是我应该发布更多代码? 问题答案: 通常是异步的,这意味着在您处于状态时,它尚未更新。尝试将日志放入方法的回调中。状态更改完成后执行:

  • 问题内容: 我有一个简单的React组件,它的输入字段带有一个onChange事件。触发onChange事件,并使用输入字段中的值更新某些组件状态。但是我在控制台记录日志时注意到状态是一个字符。因此,如果我键入“ Hello”,控制台将显示状态为 ‘’在H上 HE上的“ H” HEL上的“ E” 地狱中的“ L” HELLO上的“ L” 那个怎么样? 问题答案: 是异步的。这意味着记录的时间控制台

  • 问题内容: 我正在做一个待办事项应用程序。这是违规代码的非常简化的版本。我有一个复选框: 这是调用复选框的函数: updateItem是映射为分派到redux的函数 我的问题是,当我调用updateItem操作并在console.log状态时,它总是落后1步。如果未选中该复选框且该复选框不为true,则仍将状态为true传递给updateItem函数。我是否需要调用另一个函数来强制状态更新? 问题