当前位置: 首页 > 知识库问答 >
问题:

如何使用Hook(ForwardRef概念)在子组件中调用父方法

翟俊哲
2023-03-14

我尝试了以下代码,但失败了,因此,这是我的父组件:

    import React from 'react'
import ChildComponent from './ChildComponent';

const ParentComponent = (props) => {

    //step 1
    // const inputRef = React.createRef();
    const buttonRef = React.useRef();
    const focusHandler = () => {
        alert("hi");
    }

    return (
        <div>
            {/* In parent, we generally pass reference to child which we dint do here, lets see if props children help here */}
            {props.children}
            <ChildComponent ref="buttonRef" />

        </div>
    )
}

export default ParentComponent;

这是我的子组件:

import React from 'react'

const ChildComponent = React.forwardRef((props, ref) => {
    return (
        <div>
            <button onClick={ref.focusHandler}>Focus Input</button>      
        </div>
    )
})

export default ChildComponent;

在子组件中单击上面的按钮,我希望调用父方法。如何才能做到这一点?编辑

共有3个答案

羿昊英
2023-03-14

只需将父组件中的ref替换为focusHandler,如下所示

<ChildComponent focusHandler={focusHandler} />

然后在ChildComponent中,也删除ref

陆文康
2023-03-14

如果你想知道在这种情况下如何使用ref(即使这不是传递回调的推荐方式),你需要分配焦点处理程序键,并使用ref与ref.current,参考组件和道具文档。

const ParentComponent = () => {
  const buttonRef = React.useRef({ focusHandler: () => alert("hi") });

  return (
    <div>
      <ChildComponent ref={buttonRef} />
    </div>
  );
};

const ChildComponent = React.forwardRef((props, ref) => {
  return (
    <div>
      <button onClick={ref.current.focusHandler}>Focus Input</button>
    </div>
  );
});
宋明亮
2023-03-14

出现错误的原因是函数组件中的ref需要使用ref={buttonRef}传递,而不是ref=“buttonRef”。类组件可以使用字符串引用,但即使在那里也不推荐使用。

对于从父组件调用函数,您不需要使用ref来执行此操作。因此,如果这是使用ref的唯一原因,则可以删除ref。相反,将函数作为道具传递:

const ParentComponent = (props) => {
    const focusHandler = () => {
        alert("hi");
    }

    return (
        <div>
            <ChildComponent focusHandler={focusHandler} />
        </div>
    )
}

const ChildComponent = (props) => {
    return (
        <div>
            <button onClick={props.focusHandler}>Focus Input</button>      
        </div>
    )
}
 类似资料:
  • 问题内容: 我有一个父子组件,我想在子组件中调用父方法,如下所示: 这将返回错误消息: 如何在子组件中调用此父方法? 问题答案: 试试这个。将功能作为道具传递给子组件。

  • 我需要在ReactJS中从父组件调用子组件方法。我试过使用裁判,但不能做到这一点。有没有人能提出任何解决方案。多谢了。

  • 本文向大家介绍Vue父组件调用子组件事件方法,包括了Vue父组件调用子组件事件方法的使用技巧和注意事项,需要的朋友参考一下 Vue父组件向子组件传递事件/调用事件 不是传递数据(props)哦,适用于 Vue 2.0 方法一:子组件监听父组件发送的方法 方法二:父组件调用子组件方法 子组件: 父组件: 以上这篇Vue父组件调用子组件事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希

  • 下面有一个子组件,我正在尝试更新父组件中的。我已经尝试了几个迭代,但没有运气。

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件:

  • 我已经创建了一个子组件,它有一个我想调用的方法。 当我调用这个方法时,它只触发行,它不会设置属性?? 下面是快速启动的Angular应用程序和我的更改。 家长 孩子 如何设置属性?