反应:状态更新延迟

问题描述 投票:0回答:2

我正试图通过检查单选按钮来改变状态。当我检查它时,它只在我检查下一个单选按钮后才更新该值。如果我单击第一个单选按钮它将不会更改状态,如果我检查第二个单选按钮,它将使用先前检查的单选按钮的值更新状态。谁能帮我解决这个问题?

class App extends React.Component {

    state = { checked: false, radioValue: '' }

    handleChange = (event) => {
        const target = event.target;
        const value = target.value;
        const name = target.name;

        console.log("this.state", this.state); // Gets previous value

        this.setState({
          [name]: value
        });
      }

    render() {

        return (
            <div className="wrapper">

                       <input
          name="radioValue"
          type="radio"
          value="aaa"
          checked={this.state.radioValue === 'aaa'}
          onChange={this.handleChange} />First Radio Button

            <br />

        <input
          name="radioValue"
          type="radio"
          value="bbb"
          checked={this.state.radioValue === 'bbb'}
          onChange={this.handleChange} />Second Radio Button

            </div>
        );
    }
}

export default App;
json reactjs checkbox
2个回答
0
投票
    this.setState({
      [name]: value
    },()=>console.log(this.state));

你也可以通过在setstate中使用回调来检查这个


0
投票

请试试这个。 class App扩展了React.Component {

constructor(props) {
    super(props);
    this.state = {
        checked: ""
    };
}

handleChange = (event) => {
    console.log("this.state", this.state); // Gets previous value
    this.setState({
      checked: event.target.value
    });
}

render() {

    return (
        <div className="wrapper">
            <input name="radioValue" type="radio" value="aaa"
                checked={this.state.checked === 'aaa'}
                onChange={this.handleChange} />
                First Radio Button
            <br />
            <input name="radioValue" type="radio" value="bbb"
                checked={this.state.checked === 'bbb'}
                onChange={this.handleChange} />
                Second Radio Button
        </div>
    );
}

}

它在我的机器上运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.