【问题标题】:How to get data using two different state variables in ReactJS?如何在 ReactJS 中使用两个不同的状态变量获取数据?
【发布时间】:2018-08-05 11:39:56
【问题描述】:

我制作了 4 个单选按钮和一个选项输入框:其他单选按钮(见截图)。当我选中其他单选按钮并在输入框中输入值时,this.state.gender 变为 -1this.state.gendertext 等于输入框中输入的文本。所以我想做this.state.gender = this.state.gendertext当且仅当其他单选按钮被选中,否则this.state.gender等于单选按钮选项值和this.state.gendertext = ''

注意:-1 用作最后一个单选按钮选项的标识符。

contactform.js:

import React, { Component } from 'react';

class ContactForm extends Component {
  constructor(props){
    super(props);
    this.state = {
        gender:'',
      gendertext:''

    };
  }

setGender(checkedValue){
    console.log(checkedValue);
    this.setState({
        gender:checkedValue
    })
  }

  onChangeTextBoxGender(event){
  this.setState({gendertext: event.target.value})
  }

savedata(age, gender, health, name, email, info, fitness){
        let newcontent = contentref.push();

      if(this.state.gender === -1){
        this.setState({
          gender:this.state.gendertext
        })
      }

        newcontent.set({

            gender:this.state.gender,
        gendertext:this.state.gendertext

        });
  }
 render() {

    return (
      <div>

        <div id="center">
          <form>
<div id="gender">
              <div className="form-group">
                <div className="col-sm-offset-2 col-sm-10">
                  <h4>What is your gender?</h4>  
                </div>
              </div>

              <div className="form-group">
                <div className="col-sm-offset-2 col-sm-10">
                  <div className="radio">
                    <label><input type="radio" name="gender" checked={(this.state.gender === 'Female')} onChange={this.setGender.bind(this,'Female')}/> Female</label>
                  </div>
                </div>
              </div>
              <div className="form-group">
                <div className="col-sm-offset-2 col-sm-10">
                  <div className="radio">
                    <label><input type="radio" name="gender" checked={(this.state.gender === 'Male')} onChange={this.setGender.bind(this,'Male')}/> Male</label>
                  </div>
                </div>
              </div>
              <div className="form-group">
                <div className="col-sm-offset-2 col-sm-10">
                  <div className="radio">
                    <label><input type="radio" name="gender" checked={(this.state.gender === 'Prefer not to say')} onChange={this.setGender.bind(this,'Prefer not to say')}/> Prefer not to say</label>
                  </div>
                </div>
              </div>

              <div className="form-group">
                <div className="col-sm-offset-2 col-sm-10">
                  <div className="radio">
                    <label><input type="radio" name="gender" checked={(this.state.gender === -1)} onChange={this.setGender.bind(this,-1)}/>Other</label>
                    <input type="text" class="form-inline" id="other1" value={this.state.gendertext} onChange={this.onChangeTextBoxGender.bind(this)}/>
                  </div>
                </div>
              </div>
            </div>
 </form>
        </div>

      </div>
    );
  }
}

export default ContactForm;

截图: here

【问题讨论】:

  • 您面临的问题是什么?
  • @ViswasMenon 当我检查选项单选按钮 this.state.gender 时,我已经制作了 2 个状态变量gender 和gendertext 变为-1,并且当我们检查了其他单选按钮时,我们在输入按钮中输入了文本,所以现在@987654331 @ 等于输入框文本。现在如果this.state.gender === -1 我希望它等于this.state.gendertext
  • 你是不是在上面的 savedata() 里面做那个检查,还是它不起作用?
  • 我也不清楚你的问题是什么。对我来说似乎很x-y ish。如果你想改变状态调用 setState。但我真的认为你应该描述功能应该是什么,而不是你认为你的解决方案应该是什么
  • 还有什么是contentref?在我看来是不确定的

标签: javascript reactjs


【解决方案1】:
  onChangeTextBoxGender(event){
    const txt=event.target.value;
    this.setState({
      gendertext: txt,
        gender: txt
    })
  }

还有,

  setGender(checkedValue){
    console.log(checkedValue);
    this.setState({
      gender:checkedValue,
      gendertext:''
    })
  }

并更改以下行:

<label><input type="radio" name="gender" checked={(this.state.gender === -1 || this.state.gendertext.length >0)} onChange={this.setGender.bind(this,-1)}/>Other</label>

【讨论】:

  • 什么??你是说你只能有一个状态键?
  • @azium,有什么问题?!
  • @salman.zare 你的答案不起作用当我检查选项单选按钮 this.state.gender 变为 -1 并且我们检查了我们键入的其他单选按钮时,我已经制作了 2 个状态变量性别和性别文本在输入按钮的文本中,所以现在 this.state.gendertext 等于输入框文本。现在 if` this.state.gender === -1` 我希望它等于 this.state.gendertext
  • savedata 函数内部。
  • @salman.zare 我收到错误预期请在此处查看我编辑的代码jsfiddle.net/5L02k7zz
猜你喜欢
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多