如何从父中调用子组件函数

时间:2020-05-11 16:04:43

标签: reactjs

如何在React中从父级调用子组件功能

单击按钮需要从parentComponent调用子函数needToBeCalled()

请参考下面的代码段

class Parent {

render(){
return(
<button onClick={() => }>Click</button>
<Child />
)
}
}

class Child {
function needToBeCalled() {

}
render(){
return (

)
}
}

2 个答案:

答案 0 :(得分:1)

这是React中的反模式,但是您可以使用ref来做类似的事情


  class Parent {
    constructor(props) {
    super(props);
     this.myRef = React.createRef();
   }
  render(){
     return(
      <button onClick={this.myRef.current}>Click</button>
      <Child myRef={this.myRef}/>
    )
   }
  }

  class Child {
    componentDidMount(){
      function needToBeCalled() {

    }
    this.props.myRef.current = needToBeCalled
  }
  render(){
   return (

    )
 }
}

答案 1 :(得分:0)

您不能,但是有另一种方法可以成功实现您想做的事情。

替代方法是在Child组件中使用一个名为componentDidUpdate()的反应生命周期,并获取已更改的道具。

例如

class Parent extends React.PureComponent {
    state={
        trigger:false
    }
    render(){
        return(
        <button onClick={() => {this.setState(prevState=>({trigger:!prevState.trigger}))}}>Click</button>
        <Child trigger={this.state.trigger} />
        )
    }
}

class Child extends React.PureComponent {
    componentDidUpdate(prevProps, prevState) {
        if (this.props.trigger && prevProps.trigger !== this.props.trigger) { // <---- When the props trigger turns true, we are good to go
            this.needToBeCalled() // <---- You do trigger your function right now kid
        }
    }
    function needToBeCalled() {

    }
    render(){
        return (

        )
    }
}