代码之家  ›  专栏  ›  技术社区  ›  user3789200

反应状态更改未按预期工作

  •  0
  • user3789200  · 技术社区  · 6 年前

    嗨,这是一个代码,我试图从一个表单提交数据。

    import * as React from 'react'
    
    export class User extends React.Component{
    
        constructor(props) {
            super(props);
    
            this.state = {
                name: '',
                message: '',
                messages: ''
            }
            this.handleSubmit = this.handleSubmit.bind(this);
            this.handleChange = this.handleChange.bind(this);
        }
        render() {
            return (
    
                <div class="panel panel-default" id="frame1" onSubmit={this.handleSubmit}>
    
                <form class="form-horizontal" action="/action_page.php">
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="name">Your Name </label>
                      <div class="col-sm-10">
                                <input type="text" class="form-control" name="name" placeholder="Enter your Name"  onChange={this.handleChange} />
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="message">Message</label>
                        <div class="col-sm-10">
                                <input type="text" class="form-control"  name="message" placeholder="Enter your Message" onChange={this.handleChange}/>
                        </div>
                    </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" id="submit" class="btn btn-default">Submit</button>
                            </div>
                        </div>
                    </form>
                    </div>
           );
        }
    
        handleChange(evt) {
            this.setState({ [evt.target.name]: evt.target.value });
        }
    
    
        handleSubmit(event) {
            this.setState({ messages: this.state.message });
            alert('A name was submitted: ' + this.state.name + ' jjjjjj' + this.state.messages);
            event.preventDefault();
        }
    }
    

    正如您在handleSubmit(event)方法中看到的,我将message的值设置为messages。但是当我尝试打印消息时,没有设置任何值。我在这里犯了什么错误。这个值不需要打印吗

    1 回复  |  直到 6 年前
        1
  •  1
  •   wdm    6 年前

    setState 是异步的。试试这个:

    handleSubmit(event) {
        event.preventDefault();
        this.setState({ messages: this.state.message }, () => {
            alert('A name was submitted: ' + this.state.name + ' jjjjjj' + this.state.messages);
        });
    }
    

    setState() 并不总是立即更新组件。它可以批处理或推迟更新,直到稍后。这使得阅读 this.state 打过电话之后 设置状态() componentDidUpdate 或者 设置状态 回拨( setState(updater, callback) ),其中任何一个都保证在应用更新后激发。

    https://reactjs.org/docs/react-component.html#setstate