javascript - 在输入更改时更改子级内部的父级状态

标签 javascript reactjs

我有以下父组件:

   class NewPetForm extends React.Component {
     state = {
       name: '',
       age: '',
       animal: '',
       breed: ''
       };

    render() {

    return (
      <StyledNewPetForm >
        <Input label="name" />
        <Input label="age" />
        <Input label="animal"/>
        <Input label="breed"/>
        <Button type="submit" />
      </StyledNewPetForm>
    );
  }
}

以及以下子组件:

  class Input extends React.Component {
  render() {
    return (
      <StyledWrapper>
        <StyledInput
          value={this.props.test}
          type="text"
        />
      </StyledWrapper>
    );
  }
}

是否可以监听子组件中所有输入的变化并相应地更新状态?

我想要实现的基本上是将处理程序传递给不同的输入并动态更新状态,因此有可能重用输入组件。

changeHandler = (event,stateName) =>{
  this.setState({[stateName]:event.target.value]})
}
<Input changed={changeHandler(event,'name')}></Input>
<Input changed={changeHandler(event,'age')}></Input>
<Input changed={changeHandler(event,'breed')}></Input>
// Inside Input
<input onChange={this.props.changed}/>

感谢您的帮助!

最佳答案

是的,您可以这样做,您可以将函数作为属性传递给子元素,并在子元素发生更改时调用它。

这是一个例子:

class NewPetForm extends React.Component {
 state = {
   name: ''
 };

 onValueChange(key, event) {
    this.setState({[key]: event.target.value})
 }

 render() {
    return (
      <StyledNewPetForm >
        <Input value={this.state.name} onValueChange={this.onValueChange.bind(this, 'name')} />
      </StyledNewPetForm>
    );
 }
}

和 child

class Input extends React.Component {
 render() {
     return (
      <StyledWrapper>
        <StyledInput
          onChange={this.props.onValueChange}
          value={this.props.value}
          type="text"
        />
      </StyledWrapper>
    );
  }
}

{[key]: event.target.value} 可能看起来很困惑,这只是新语法,允许您在对象文字中使用字符串作为属性名称。

重要的部分是onChange={this.props.onValueChange},在这里,当输入的值发生变化时,我将调用父函数NewPetForm.onValueChange

关于javascript - 在输入更改时更改子级内部的父级状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697381/

相关文章:

javascript - 在网络音频中,为什么 contextTime 比 baseLatency 滞后 currentTime?

javascript - 在 rpivottable 中分组排序

javascript - 使用动态 Tab 时 Summernote 不工作

css - 导航栏向左移动时超出页面内容的长度

javascript - 将返回 OR 运算符的函数传递给 React 中的其他内容

javascript - 在循环中循环和显示其他数据时只显示一次 <div>

javascript - jquery on 不会对由clone()添加的元素使用react

reactjs - React-datetime + 在 React 中设置时间间隔

reactjs - 获取选择字段中所选选项的属性

javascript - 按价格对对象数组进行排序(从最低到最高)