当前位置: 首页 > 面试题库 >

如何在基于类的组件中使用React.forwardRef?

鲜于华容
2023-03-14
问题内容

我正在尝试使用React.forwardRef,但是绊倒了如何使其在基于类的组件(而不是HOC)中工作。

docs示例使用元素和功能组件,甚至将类包装在函数中以获取更高阶的组件。

因此,从像这样在他们的ref.js文件:

const TextInput = React.forwardRef(
    (props, ref) => (<input type="text" placeholder="Hello World" ref={ref} />)
);

而是将其定义如下:

class TextInput extends React.Component {
  render() {
    let { props, ref } = React.forwardRef((props, ref) => ({ props, ref }));
    return <input type="text" placeholder="Hello World" ref={ref} />;
  }
}

要么

class TextInput extends React.Component {
  render() { 
    return (
      React.forwardRef((props, ref) => (<input type="text" placeholder="Hello World" ref={ref} />))
    );
  }
}

只工作:/

另外,我知道我知道,裁判不是反应方式。我正在尝试使用第三方画布库,并希望将其一些工具添加到单独的组件中,因此我需要事件侦听器,因此需要生命周期方法。稍后可能会走不同的路线,但是我想尝试一下。

文档说这是可能的!

引用转发不限于DOM组件。您也可以将引用转发到类组件实例。

从本节的注释中。

但是随后他们继续使用HOC,而不仅仅是类。


问题答案:

始终使用相同道具的想法ref可以通过使用帮助程序代理类导出来实现。

class ElemComponent extends Component {
  render() {
    return (
      <div ref={this.props.innerRef}>
        Div has ref
      </div>
    )
  }
}

export default React.forwardRef((props, ref) => <ElemComponent 
  innerRef={ref} {...props}
/>);

因此,基本上,是的,我们被迫拥有其他支持转发引用的道具,但这可以在中心下完成。公众将其用作常规参考非常重要。



 类似资料:
  • 我是一个新手,我总是想到一个基于类的组件,就像我在Java中做类一样。 在Java中比较基于类的组件和类的两种思维是正确的吗?换句话说,呈现的组件是否像Java中的对象一样,它们是类的实例化? 有区别吗?

  • 如果您在声明组件时更喜欢基于类的 API,则可以使用官方维护的vue-class-component装饰器: import Vue from 'vue' import Component from 'vue-class-component' // @Component 修饰符注明了此类为一个 Vue 组件 @Component({ // 所有的组件选项都可以放在这里 template:

  • 问题内容: 在花了一些时间学习React之后,我了解了创建组件的两个主要范例之间的区别。 我的问题是,什么时候应该使用哪个?为什么?一个人相对于另一个人的利益/取舍是什么? ES6课程: 功能性: 我认为只要没有状态可以由该组件操纵,功能就可以了,是吗? 我猜如果我使用任何生命周期方法,最好使用基于类的组件。 问题答案: 你有正确的主意。如果您的组件只做一些道具和渲染,那么功能就可以了。您可以将它

  • 在花了一些时间学习React之后,我理解了创建组件的两种主要模式之间的差异。 我的问题是什么时候我应该使用哪一个,为什么?一种方法与另一种方法相比有哪些好处/利弊? ES6类: 功能: 我认为只要没有状态可被该组件操纵,就可以正常工作,但就这样吗? 我想如果我使用任何生命周期方法,最好使用基于类的组件。

  • 我正在尝试从父组件到子组件获取数据列表以显示它,但无法执行此操作 当我试图console.log子它显示的数据,但无法返回div和渲染到屏幕 算法的设计与分析 计算机体系结构 数据库管理系统 微处理机 概率与统计 关系数据库管理系统实验室 微处理机 编程

  • 问题内容: 我从openjdk:8-jdk-alpine创建了一个docker镜像,但是当我尝试执行简单的命令时出现以下错误: 问题答案: 默认情况下,高山docker映像未安装bash。您将需要添加以下命令来获取: 如果您使用,那么您可以 保持docker映像大小较小。(感谢@sprkysnrky的评论)