【问题标题】:How to dynamically set State from Form input如何从表单输入动态设置状态
【发布时间】:2018-06-16 01:08:22
【问题描述】:

我有 2 个 React 父/子组件。子组件有一个为父组件的先前状态添加 +1 的按钮,以及一个为onChange 事件触发handleChange 函数的表单。

问题 从表单输入中,我想触发一个函数,将状态设置为前一个状态,+表单中的输入。

例如,如果我在输入中输入 50 并点击提交,我希望新状态为 100

这是一个代码框:https://codesandbox.io/s/30mz2vvyo1

class Parent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      value: 50
    }

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleChange(event) {
    this.setState((prevState) => {
      return { value: prevState.value + 1 }
    });
  }
  handleSubmit(event) {
    event.preventDefault();
  }

  render() {
    return (
      <div>
        <Child value={this.state.value} handleChange={this.handleChange} handleSubmit={this.handleSubmit} />
     </div>
    )
  }
}


class Child extends React.Component {
  render() {
    return (
      <div>

        <button onClick={this.props.handleChange}>Count + 1</button>
        <div>{this.props.value}</div>

        <form onSubmit={this.props.handleSubmit}>
          <label>
            Name:
          <input type="text" onChange={this.props.handleChange} />
          </label>
          <input type="submit" value="Submit" />
        </form>

      </div>
    )
  }
}

【问题讨论】:

  • 您可能需要像这样将值 attr 添加到子组件上的输入元素
  • 如果我添加值 attr,表单将变为受控表单,然后我无法更改我认为的输入值,如果我想将值更改为 40 而不是 50,我无法删除输入文字

标签: javascript reactjs


【解决方案1】:

您所面临的问题可以通过以下方式得到缓解;

  1. 您需要在状态中有两个不同的变量。价值,可以保持你的价值。您还需要保存输入的当前值,我们称之为 inputNumber。
  2. 您需要为您的按钮提供 onClick 功能。在所述函数中,按以下方式设置您的状态;

代码:

this.setState({
  value: this.state.value + this.state.inputNumber,
})

做完这些事情后,它应该可以按预期工作了。

我已经更新了你的codeandbox,你可以看看here

【讨论】:

  • 函数如何从表单中获取输入数据?可以更具体吗?你说的对我来说完全有道理,但我无法重现它......
  • 你需要在handleChange函数中设置inputNumber。在那里,也将inputNumber 设置为event.target.value
  • 您能否详细说明您的代码的当前状态?它是如何运作的,当前的代码是什么?它在哪些方面与您希望实现的目标不同? @Nullest
  • 我添加了一个代码框,现在它只使用按钮将状态“值”设置为+1
  • 我已经更新了您的代码框以反映我刚刚在答案中写的内容,请检查答案。 @Nullest
猜你喜欢
  • 1970-01-01
  • 2018-06-13
  • 2019-04-02
  • 2019-09-11
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多