从reactjs中的父组件调用子组件方法

Posted

技术标签:

【中文标题】从reactjs中的父组件调用子组件方法【英文标题】:Call child component method from parent component in reactjs 【发布时间】:2017-11-24 02:48:35 【问题描述】:

我需要从父组件调用子组件方法 在 reactjs 中。我曾尝试使用 refs 但无法做到。任何人都可以提出任何解决方案。 谢谢。

【问题讨论】:

Call child method from parent的可能重复 虽然我已经很晚了,但我也在学习 React,所以我很好奇父母需要调用子方法的情况。你愿意解释一下吗? 【参考方案1】:

不要:)

将函数提升到父级并将数据作为道具向下传递。您可以向下传递相同的函数,以防孩子也需要调用它。

https://facebook.github.io/react/docs/lifting-state-up.html

【讨论】:

【参考方案2】:

你可以给子组件分配一个引用,然后像父组件一样调用函数形式

class Parent extends React.Component 
   callChildFunction = () => 
       this.child.handleActionParent();  ///calling a child function here
   
   render()
      return (
           <div>
           /* other things */
           <Child ref=(cd) => this.child = cd/>
           </div>
      )
    


class Child extends React.Component 
   handleActionParent = () => 
       console.log('called from parent')
   
   render() 
      return (
           /*...*/
      )
   

【讨论】:

【参考方案3】:

如果使用 React Hooks,你可以使用 useRef 和 useImperativeHandle hooks。

在子组件中,添加钩子中的函数。

const Child = forwardRef((props, ref) => 

  const printSomething = () =>
     console.log('printing from child function')
  
  useImperativeHandle(ref, () => (
    printSomething: printSomething
  ));

  return <h1>Child Component</h1>;
);

使用 ref 从父级调用公开的函数。

const Parent = () => 
  const childRef = useRef();

  return (
    <div>
      <Child ref=childRef />
      <button onClick=() => childRef.current.printSomething()>Click</button>
    </div>
  );
;

【讨论】:

【参考方案4】:

您可以将registerCallback props 传递给您的孩子并从componentDidMount 调用它并将引用传递给您的孩子组件方法,然后您可以随时调用它的方法

【讨论】:

【参考方案5】:

你可以在你的父母中创建一个参考

在构造函数中:

 this.child = React.createRef();

在任何函数中:

execute=(comment)=>
        this.child.current.addComment();
    

render()
        return (
            <div>
                <Messages ref=this.child comment=this.state.comment/>
            </div>
        )
    

在消息(子)组件中

addComment=()=>
    console.log("Pi ", this.props);

  ;

【讨论】:

以上是关于从reactjs中的父组件调用子组件方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 useRef 从 Reactjs 中的父级调用子函数

如何从 React 中的父类更新我的子组件状态?

从 React 组件调用功能组件中的函数

将函数传递给reactjs中的子组件

如何在状态更改(父)reactjs时重新渲染子组件

ReactJS学习笔记-父子组件间的通信