如何从父组件更新子组件的状态?

IT技术 javascript reactjs
2021-05-14 13:57:22

我刚刚开始使用 React,无法弄清楚这一点。

    <Select>
      <Search term={this.state.filename} />
    </Select>

Select组件用于选择文件,我想将Search组件中输入文本的初始值设置为文件名。

这是搜索组件

  <form onSubmit={this.handleSubmit}>
    <input
      type="search"
      value={this.props.term}
      onChange={this.handleChange}
    />
  </form>

现在,每当用户尝试从父级设置的初始值更改输入值时,我都会使用新的输入值设置子级的状态,但这会触发重置输入值的子级的重新渲染。解决这个问题的正确方法是什么?

我目前的想法是,如果我像这样分配 input 的值value={this.props.term} ,那么更改状态将触发以文件名作为默认值的子项的重新渲染,并且用户将能够对其进行编辑。

2个回答

尝试将 onChange on Search 委托给 props,这样当 onChange 对 child 调用时,您的父母将成为设置值的人。

onChange={this.props.onInputChange}

这里您使用的是value={this.props.term},它使输入成为受控组件。此处的值将始终与 相同this.props.term,即来自父组件的状态。<Search term={this.state.filename} />

我想你真正想做的是在子组件中改变父组件的状态。

然后你应该将一个函数从父组件传递给子组件。该函数将改变父组件的状态。您应该在父组件中定义一些东西,如下所示:

onChildInputChange(term) {
    this.setState({term: term })
}

然后通过 props 传递给子组件

<Select>
   <Search term={this.state.filename} onChildInputChange={this.onChildInputChange} />
</Select>

以便在子组件中您可以执行以下操作:

 <form onSubmit={this.handleSubmit}>
    <input
      type="search"
      value={this.props.term}
      onChange={()=>{this.props.onChildInputChange()}}
    />
  </form>