如何传递父级状态以在子组件中使用?

How can I pass a parent's state to be used within a child component?

我有一个父组件,我在其中循环遍历数组并将 clicked 的状态设置为数组中单击项目的 ID 的状态。

我在需要访问此状态的其他地方使用此组件。 我怎样才能把这个状态传递下去?

这是我的循环:

{
 filteredArray.map(link => {
  return (
   <div
   key={link.id}
   role="button"
   style={{paddingBottom: 20}}
   onClick={this.changeView(link.id)}
   onKeyPress={() => {}}
   tabIndex={0}
  >
  <Paragraph size="large">
    <a className='heading__dropdown__link'>
     {link.label}
    </a>
  </Paragraph>
 </div>
)
})
}

这是我为 clicked

设置状态的函数
  changeView(id) {
    return (
      () => this.setState({clicked: id})
    )
  }

这里是我使用上述组件的地方: 怎么才能在这里使用上面的状态呢?

 <HeadingDropdown
  expandedTitle="Change view"
  links={links}
  heading={currentLocation}
 />

处理您最后的评论。如果你传递了一个函数作为 HeadingDropdown 中的道具,你可以用它把它 state-value 传回父级。

父项中定义的函数

class Parent extends React.Component{
   state = {
     headingDropdownvalues: {}
   }

   getHeadingDropdownState = (valueFromChild) => {
      this.setState({
         headingDropdownvalues: valueFromChild
      })

   }

   render(){
      <HeadingDropdown passupstate={this.getHeadingDropdownState}/>
   }
}

现在您的父组件 set-up 从 HeadingDropdown 使用 state-value。

现在我们需要将 HeadingDropdown 配置为在单击后实际向上传递该值。

在 HeadingComponent 中,我们只需要更新你的 changeView 方法来调用我们传递下来的 prop,在设置状态之后。我们通过利用 this.setState() 的第二个参数来做到这一点,它是 call-back.

changeView(id) {
    return (
      () => this.setState({
        clicked: id
      }, () => this.props.passupstate(this.state)) //right here you can pass in whatever you want
    )
  }

这里还有一个沙盒供您查看其工作原理:https://codesandbox.io/s/jovial-thompson-ldg3n