繁体   English   中英

如何在 ReactJs 中使用 RadioButton 设置状态

[英]How to setState using RadioButton in ReactJs

我试图在 ReactJs 中使用单选按钮设置状态,但我不知道为什么这不起作用,也许我的代码中缺少一些东西

  var handleRadio = (event)=>{
      this.setState({views:event.target.value})
     
    }
    

这是我的函数“handleRadio”

 <input
                    type="radio"
                    checked={this.state.views === "streets-v11"}
                    onClick={handleRadio} 
                    value="streets-v11"
                /> Street Map <br />
                <input
                    type="radio"
                    checked={this.state.views === 'outdoors-v11'}
                    onClick={handleRadio} 
                    value="outdoors-v11"
                /> Topo Map <br />
                    <input
                    type="radio"
                    checked={this.state.views === 'satellite-v9'}
                    onClick={handleRadio} 
                    value="satellite-v9"
                /> Satellite Map  

这是我的按钮代码.. 我试图在单选按钮单击时调用该函数,然后根据该函数我试图设置 state 的值,但是这段代码在我的项目中无法用于 setState 这段代码有什么问题? 我的状态名称是初始化为空字符串的视图....

我认为你应该使用 OnChange 而不是 OnClick 道具

onClick={handleRadio}更改为OnChange={handleRadio}

这是一个完整的例子

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      views: [
        { txt: 'streets-v11', value: false },
        { txt: 'outdoors-v11', value: true },
        { txt: 'satellite-v9', value: true }
      ]
    };
    this.handleRadio = this.handleRadio.bind(this);
  }

  handleRadio(e) {
    let views = this.state.views.slice(0);
    views = views.map((v) => {
      if (v.txt === e.target.name) v.value = !v.value;
      return v;
    });
    this.setState({ ...this.state, views });
  }

  render() {
    return (
      <h1>
        {this.state.views.map((v) => {
          return (
            <div key={v.txt}>
              <input
                name={v.txt}
                type="radio"
                checked={v.value}
                onClick={this.handleRadio}
              />
              {v.txt}
            </div>
          );
        })}
      </h1>
    );
  }
}

render(<App />, document.querySelector('#root'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM