如何访问父组件中子组件的引用

2023-11-30

如果我有类似的东西

<Parent>
  <Child1 />
  <Child2 />
  <Child3 />
</Parent>

我想从Child2我在哪里refs="child2refs", 我怎样才能做到这一点?


推荐用于 16.3 之前的 React 版本

如果无法避免,则从建议的模式中提取反应文档将会:

import React, { Component } from 'react';

const Child = ({ setRef }) => <input type="text" ref={setRef} />;

class Parent extends Component {
    constructor(props) {
        super(props);
        this.setRef = this.setRef.bind(this);
    }

    componentDidMount() {
        // Calling a function on the Child DOM element
        this.childRef.focus();
    }

    setRef(input) {
        this.childRef = input;
    }

    render() {
        return <Child setRef={this.setRef} />
    }
}

The Parent将函数作为 prop 转发到Parent's this。当 React 调用Child's ref prop setRef它将分配Child's ref to the Parent's childRef财产。

推荐用于 React >= 16.3

引用转发是一种选择加入的功能,它允许某些组件获取它们收到的引用,并将其进一步向下传递(换句话说,“转发”)给子组件。

我们创造成分转发他们的ref with React.forwardRef。 返回的成分ref 属性必须与返回类型相同React.createRef。每当 React 安装 DOM 节点时,属性current of the ref创建于React.createRef将指向底层 DOM 节点。

import React from "react";

const LibraryButton = React.forwardRef((props, ref) => (
  <button ref={ref} {...props}>
    FancyButton
  </button>
));

class AutoFocus extends React.Component {
  constructor(props) {
    super(props);
    this.childRef = React.createRef();
    this.onClick = this.onClick.bind(this);
  }

  componentDidMount() {
    this.childRef.current.focus();
  }

  onClick() {
    console.log("fancy!");
  }

  render() {
    return <LibraryButton onClick={this.onClick} ref={this.childRef} />;
  }
}

转发参考 HOC 示例

Created 成分正在转发他们的ref到子节点。

function logProps(Component) {
  class LogProps extends React.Component {
    componentDidUpdate(prevProps) {
      console.log('old props:', prevProps);
      console.log('new props:', this.props);
    }

    render() {
      const {forwardedRef, ...rest} = this.props;

      // Assign the custom prop "forwardedRef" as a ref
      return <Component ref={forwardedRef} {...rest} />;
    }
  }

  // Note the second param "ref" provided by React.forwardRef.
  // We can pass it along to LogProps as a regular prop, e.g. "forwardedRef"
  // And it can then be attached to the Component.
  return React.forwardRef((props, ref) => {
    return <LogProps {...props} forwardedRef={ref} />;
  });
}

See 转发参考文献在 React 文档中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问父组件中子组件的引用 的相关文章

随机推荐

  • 如何以 root 身份运行 PHP exec()?

    我正在尝试用 PHP 构建一个防火墙管理器 但是当我执行时 结果数组为空 我努力了 响应为www data Apache 正在使用的用户 我该怎么做才能以 root 身份执行 exec 函数 最好不要更改 Apache 用户 不要这样做 您
  • Matlab 中的数组运算

    我有这个二维数组 x 62 29 64 63 31 62 65 29 60 63 29 62 63 31 62 根据以下公式 每列中的第一个元素是 R 第二个元素是 G 第三个元素是 B 我想要一个函数来计算以下操作 到目前为止 我的函数定
  • 在 Heroku 上发布具有 api 密钥的应用程序是否安全?

    我计划在 Heroku 上部署一个使用一些 api 密钥的应用程序 我本来打算使用 git 部署方法 我的应用程序上有一些 api 密钥 如果它们被泄露 可能会产生问题 通过 Heroku 部署这样的应用程序安全吗 我应该使用他们的保管箱方
  • 在 JavaScript 中创建嵌套对象值的 SUM

    我使用以下代码来查询 API 该代码可以很好地返回 JSON 中的嵌套值 const obj response data map function item return item id item jobNumber JSON 示例 dat
  • 限制例程使用一组有限的寄存器

    使用编译器选项 是否可以限制例程使用某些寄存器集 例如 限制例程仅使用R0 R8 目的 如果某些编译器选项可用 那么我可以确保某些例程 如中断服务例程 仅使用有限的寄存器集 从而进行有限的上下文保存和恢复 上次讨论这个问题时 共识是在逐个功
  • 如何使用 Excel 正则表达式从字符串中提取广告尺寸

    我正在尝试从字符串中提取广告尺寸 广告尺寸均为设定的标准尺寸 因此 虽然我更喜欢有一个正则表达式来查找模式 即 3 个数字后跟 2 或 3 个数字 但硬编码它也可以工作 因为我们知道大小是什么 以下是一些广告尺寸的示例 300x250 72
  • 透视投影,4 点

    我正在尝试实现透视投影 例如 我有一个给定大小的正方形 并且已知角点坐标 A1 A4 我有一个图像 其中该正方形显示在某个特定位置 我知道它的位置和显示的正方形 B1 B4 的角坐标 我想找到一个变换矩阵 M 翻译 B gt A 我按照方法
  • 如何在jsoup解析中保留大小写?

    我正在使用 jsoup 来解析一些 HTML 内容 解析 HTML 内容后 它将驼峰式属性更改为小写 例如
  • 为什么 numpy.linalg.solve() 提供比 numpy.linalg.inv() 更精确的矩阵求逆?

    我不太明白为什么numpy linalg solve 给出了更精确的答案 而numpy linalg inv 有点崩溃 给出 我认为是 估计 举一个具体的例子 我正在解方程C 1 d where C表示矩阵 并且d是一个向量数组 为了方便讨
  • 在 Cypress 中测试站点地图链接时出现拒绝服务(状态代码 429)

    我一直在测试一个大型站点地图 与这个问题相同here 在某种程度上 答案效果很好 然后开始收到状态代码 429 这是因为该网站认为我正在进行拒绝服务攻击 如何克服这个问题 cy request sitemap xml then respon
  • UIBarButtonItem 是蓝色而不是图像

    这是我的 viewDidLoad 方法中的内容 self navigationController navigationBar backIndicatorImage UIImage named back self navigationCon
  • Linq - 在一个查询中计算多个平均值

    我正在尝试将一些 SQL 查询转换为 Linq 以避免多次访问数据库 我试图转换的旧 SQL 是这样的 SELECT AVG CAST DATEDIFF ms A CreatedDate B CompletedDate AS decimal
  • python 设置将 (pdf) 转换为 jpeg 时的最大文件大小,例如棍棒

    为了后续处理的目的 在 python 中我正在转换一个多页 PDF f 转换为 JPEG temp jpg import os from wand image import Image as wimage with wimage filen
  • 从 Windows 中的文件名中删除最后一个字符

    我对批处理编程很陌生 我想删除文件名中的最后一个字符 10 myfile 12345 6789 txt 11 myfile 12345 0987 txt 我想删除文件名的最后 4 位数字 我该怎么做 我已经尝试过这个 echo off se
  • 使用 SpongyCastle 进行 RSA

    我对加密的了解非常基础 因此对于我的无知表示歉意 在 Android 应用程序中 我目前正在尝试使用以下命令来模拟此命令的执行SpongyCastle 图书馆和标准java security libs echo test openssl r
  • 以编程方式添加具有多个号码的一位联系人 Android

    如何以编程方式在 Android 手机上添加一个具有多个号码的联系人 我们可以这样做 将名称和数字数组传递给此方法 public static void addToContactList Context context String str
  • background_task.py 不显示消息 - Python

    我注意到 当我从 Discord py Github 页面运行代码片段时 它没有显示预期的消息 我稍微修改过的代码 import discord import asyncio import nest asyncio nest asyncio
  • 计算运行中位数时缺失值?

    我想平滑时间序列以避免虚假抖动 错误 换句话说 我想做一些非常局部的鲁棒平滑 我在动物园包中遇到了 rollmean 和 rollmedian 但遇到了问题 因为我的向量中有一个 NA 然后我在某处读到那些动物园函数使用 runmed 这就
  • 如果我不知道实际的对象类型,如何在 C# 中比较两个 IEnumerable

    我正在努力实施IEquatable lt gt 一个类的接口 班级有一个Parameter使用泛型类型的属性 基本上类的定义是这样的 public class MyClass
  • 如何访问父组件中子组件的引用

    如果我有类似的东西