单选按钮的反应组件

Posted

技术标签:

【中文标题】单选按钮的反应组件【英文标题】:React component for radio button 【发布时间】:2021-01-28 12:40:12 【问题描述】:

我有一个包含许多输入和选择字段的表单。 我使用输入和选择进行管理,但现在我正在尝试添加单选按钮和文本区域。 在用户选择一个选项后,我发送的 json 没有更新来自无线电标头的值,并且选中的属性在按下时也没有更新。

这是单选按钮组件:

class RadioButton extends Component 
  state = 
    selectedOption: this.props.options[0].name,
  ;

  handleOptionChange = (changeEvent) => 
    this.setState(
      selectedOption: changeEvent.target.value,
    );
  ;

  render() 
    const  name, label, headline, options, ...rest  = this.props;
    return (
      <div>
        <legend>headline</legend>
        options.map((option) => (
          <div className="form-check">
            <label className="form-check-label" htmlFor=name>
              <input
                type="radio"
                className="form-check-input"
                name=name
                key=option._id
                value=option.value
                checked=this.state.selectedOption === option.name
                onChange=this.handleOptionChange
              ></input>
              <label>option.name</label>
            </label>
          </div>
        ))
      </div>
    );
  

这是我在表单中渲染单选按钮的代码:

  renderRadioButton(name, label, headline, options) 
    const  data  = this.state;
    console.log(name);
    return (
      <RadioButton
        name=name
        label=label
        headline=headline
        value=data[name]
        options=options
      />
    );
  

这是渲染单选按钮的调用(这个类派生表单类):

  state = 
    data: 
      first_name: "",
      last_name: "",
      is_looking_for_job: "",
    ,
    boolean_options: [
       _id: 1, name: "Yes", value: "True" ,
       _id: 2, name: "No", value: "False" ,
    ],
  ;
          this.renderRadioButton(
            "is_looking_for_job",
            "Looking for job",
            "Looking for job",
            this.state.boolean_options
          )

我希望有人可以帮助我。 提前致谢!

【问题讨论】:

你帮助这个link 【参考方案1】:

您的class RadioButton 不应处理选定的值,应由创建组件的父级处理,并且该值应作为道具传递。

您的 RadioButton 组件应更新为:

class RadioButton extends Component 
  render() 
    const  name, headline, value, options, onChange  = this.props;
    return (
      <div>
        <legend>headline</legend>
        options.map((option) => (
          <div className="form-check" key=option.value>
            <label className="form-check-label" htmlFor=name>
              <input
                type="radio"
                className="form-check-input"
                name=name
                key=option._id
                value=option.value
                checked=value === option.value
                onChange=() => onChange(option.value)
              ></input>
              <label>option.name</label>
            </label>
          </div>
        ))
      </div>
    );
  

而且应该这样使用:

class MyComponent extends Component 
  state = 
    lookingForJob: "False",
    boolean_options: [
       _id: 1, name: "Yes", value: "True" ,
       _id: 2, name: "No", value: "False" 
    ]
  ;

  renderRadioButton(name, label, headline, options) 
    return (
      <RadioButton
        name=name
        label=label
        headline=headline
        value=this.state.lookingForJob
        options=options
        onChange=(newValue) => this.setState( lookingForJob: newValue )
      />
    );
  

  render() 
    return this.renderRadioButton(
      "Name",
      "Label",
      "Headline",
      this.state.boolean_options
    );
  

【讨论】:

【参考方案2】:

我认为这行是问题所在:

checked=this.state.selectedOption === option.name

改成这样:

checked=this.state.selectedOption === option.value

【讨论】:

以上是关于单选按钮的反应组件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单选按钮实现动态 UI 渲染? [关闭]

取消选中反应中的单选按钮

如何设置单选按钮默认签入反应?

如何在反应引导程序中使用单选按钮

R 闪亮的反应单选按钮

使用 jQuery 对单选按钮状态的反应