React:获取组件子组件之一的 DOM 位置

2024-03-18

我有一个非常烦人的问题,我需要有关我的组件的帮助。它在这样的上下文中使用:

<table>
  <thead>/* ... */</thead>
  <tbody>
    <COMPONENT>
      <ChildComponent>/* ... */</ChildComponent>
      <ChildComponent>/* ... */</ChildComponent>
      <ChildComponent>/* ... */</ChildComponent>
    </COMPONENT>
  </tbody>
</table>

子组件是一个包含其他组件但最终呈现简单 HTML 的组件<tr>

inside 组件.tsx,我需要获取第 n 个子节点的 DOM 值(offsetTop 和 clientHeight)。

我尝试过很多事情:

  • ReactDOM.findDOMNode(children[n])给我:

参数似乎不是 ReactComponent。键:$$typeof、type、key、ref、props、_owner、_store

  • children[n].ref只是给我空
  • 无法向子项添加引用
  • 这种作品:
children.map((child, index) =>
    index === n ? (
        <div style={{display: contents}} key={index} ref={ref}>
    ) : child
)

给我警告(但有效!):

index.js:2178 警告:validateDOMNesting(...): 不能作为 的子项出现。 在 tr (由 FoldControlContainer 创建)...

有更好的解决方案吗?我尝试使用 或其他“透明”的 DOM 组件而不是div,但没有成功。


使用 React.cloneElement 为子元素设置引用:https://reactjs.org/docs/react-api.html#cloneelement https://reactjs.org/docs/react-api.html#cloneelement ex:

React.cloneElement(child, {ref: this.setChildRef})}
export default class Test extends React.Component {

  childrenRefs = {}

  setChildRef = index => el => this.childrenRefs[index] = el;

  showInfo = () => {
    console.log('children', Object.keys(this.childrenRefs).map(key => this.childrenRefs[key].offsetTop))
  }

  render() {

    return (
      <div>
        { React.Children.toArray(this.props.children).map((c, index) => React.cloneElement(
          c,
          {ref: this.setChildRef(index)},
        ))}
        <button onClick={this.showInfo} >test</button>
      </div>
    );
  }
} 

这是完整工作示例的链接:https://stackblitz.com/edit/react-cf33ge https://stackblitz.com/edit/react-cf33ge打开右下角的控制台可以看到输出。

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

React:获取组件子组件之一的 DOM 位置 的相关文章

  • Angular UI select:从远程服务获取数据

    我正在使用角度用户界面选择 https github com angular ui ui select https github com angular ui ui select 我查看了演示的可用位置这个笨蛋 http plnkr co
  • 使用 Jest 和 React JS TestUtils 测试表单

    我有一个带有 3 个单选按钮的表单 如下所示 假名
  • 如果没有“new”,则无法调用类构造函数

    感谢这个问题已经被问过几次了 但是我遇到的几乎所有情况都是有人试图扩展非本地类的情况 我的情况有所不同 我有一个非常简单的基类 名为CObject如下 export class CObject extends BaseObject cons
  • 使用 jQuery Select2 清除下拉菜单

    我正在尝试使用奇妙的方式以编程方式清除下拉菜单Select2 http ivaynberg github com select2 图书馆 使用 Select2 远程 ajax 调用动态填充下拉列表query option HTML
  • 在随机位置启动 HTML5

    我有一个大约 2 小时长的音轨 我想在我的网站上使用它 我希望它在页面加载时在随机位置开始播放曲目 使用 HTML5 可以吗 我知道您可以使用 element currentTime 函数来获取当前位置 但是如何在完全下载之前获取曲目的总时
  • 如何在不阻止触摸启动的情况下防止“过度滚动历史导航”?

    我正在实现基于滑动的导航 但我在使用 Chrome 时遇到了麻烦 当页面向右拖动时 会触发新实现的功能 过度滚动历史导航 从而导致跳回 到 历史 1 为了防止这种情况 我必须打电话 preventDefault on touchstart
  • 如何立即启动setInterval循环? [复制]

    这个问题在这里已经有答案了 在一个简单的setInterval setInterval function Do something every 9 seconds 9000 第一个动作将在 9 秒后发生 t 9s 如何强制循环立即执行第一个
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 将 Firebase FCM 添加到 ReactJS 应用程序

    我正在尝试向我的 ReactJS 应用程序中的用户发送推送通知 我已添加 firebase 请求用户通知权限 这正在发挥作用 但现在我想注册设备令牌 但这给了我错误 消息传递 我们无法注册默认的 Service Worker 无法注册 Se
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • 如何为我的整个 Node.js 应用程序使用相同的 MySQL 连接?

    我有一个app js 我从那里运行我的整个应用程序 在 app js 内部 我require许多文件中都有代码 对于每个文件 我都这样做 var mysql require mysql var mclient mysql createCon
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • 摩纳哥:如何添加内联自动完成/代码建议?

    我找不到任何有关如何添加内联自动完成功能的示例 如下图所示 有人可以指导我如何在摩纳哥做到这一点吗 这可以在 v1 66 中启用 现在在 Insiders 中 The editor quickSuggestions设置现在接受内联为 配置值
  • Jwt 签名和前端登录身份验证

    我有这个特殊的 jwt sign 函数 Backend const token jwt sign id user id process env TOKEN SECRET expiresIn 1m res header auth token
  • 在 React 中将模板分离到外部文件

    我正在为客户开发 ReactJS 应用程序 我希望客户端能够自定义应用程序中的一些配置和模板 所以我创建了一个config js file window APP CONFIG url example com template item di
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 如何映射轮播的子项数组?

    我正在尝试将 Carousel 组件包装在映射对象数组周围作为组件的子级 目前我只能让映射创建映射对象的 1 个子对象 轮播需要像这样
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo

随机推荐

  • 在 Android 上的 OpenCV 中旋转 VideoCapture

    在 OpenCV 上使用 VideoCapture 类时如何旋转相机 Android 上的人脸检测示例 我正在旋转画布 if getResources getConfiguration orientation Configuration O
  • 从 Python 请求获取 Instagram 重定向?

    在为 Instagram 执行 oauth2 时 存在以下形式的重定向调用 https api instagram com oauth authorize client id
  • 在Android应用程序中存储用户设置的最合适的方式是什么

    我正在创建一个使用用户名 密码连接到服务器的应用程序 我想启用 保存密码 选项 这样用户就不必在每次应用程序启动时输入密码 我试图使用共享首选项来完成此操作 但不确定这是否是最佳解决方案 如果有关于如何在 Android 应用程序中存储用户
  • 如何合并两个不同大小的数据框

    我正在处理两个不同大小的数据框 matA col1 col2 col3 row1 aa abc 123 row2 cc dfg 455 row3 ee efg 345 matB col1 col4 col5 row1 aa a1 b1 ro
  • 在 C++ 中,如何仅使用带有必需参数的长选项?

    在 C 程序中 我希望有一个带有必需参数的 仅长 选项 下面是我使用的最小示例getopt long http www gnu org software libc manual html node Getopt Long Option Ex
  • 如何从 unix/linux/osx 和 windows 获取文件系统扇区大小?

    我希望能够在运行时确定给定文件系统的扇区大小 C 代码是可以接受的 例如 我将数据分区格式化为 32k 扇区大小 其中包含大量大型视频文件 我希望能够在运行时获取这个值 我想你想要statvfs http linux die net man
  • 如何从浮点输入中去除逗号?

    我有一块田地 Revenue 它应该接受像这样的值10 000 00 但是如果我输入这样的值 它会存储10进入数据库而不是10000 00 在保存之前我应该 如何删除逗号 我尝试在网上找到一些解决方案 但由于发现它们不完整而无法实施 如果有
  • CreateStdDispatch 如何知道要调用哪个方法?

    我面临着实施IDispatch http msdn microsoft com en us library ms221608 aspx界面 有四种方法 幸运的是其中 3 种很简单 function TIEEventsSink GetType
  • 如何在reactjs中包含sass文件

    我使用 browserify 来转换我的代码 现在在导入 sass 文件时出现错误 导入解析错误 任何人都可以帮我解决这个问题如何使用和集成 与最新版本create react app你不必弹出你的 React 应用程序来添加 sass 支
  • 以下警告是什么意思:“不鼓励使用有副作用的无效方法”?

    我的 scala 测试文件中有很多 nullary 方法 带有 0 个参数的方法 因此 不要将它们写为 def fooBar 我将它们写为 def fooBar 当我这样做时 我收到以下警告 Warning 22 7 side effect
  • Apache虚拟主机无域名

    我有一个安装了apache2的VPS 我想通过IP地址访问一些没有域名的PHP项目 例如 http 162 243 93 216 projecta index php http 162 243 93 216 projectb index p
  • 一旦内存使用量达到 1.5 GB,C++ 应用程序就会崩溃 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我们有一个在 Windows 32
  • Doctrine 对一对多关系进行了多次查询

    我有一个 Symfony2 应用程序 其中 Doctrine 作为 ORM 在我的应用程序中 我有两个具有一对多关系的实体 唯一的实体是User多个实体是Item 他们的关系配置如下 User oneToMany items targetE
  • 如何重用使用unittest.testcase编写的测试

    我已经使用单元测试编写了一些测试 如下所示 我想在另一个我遇到困难并需要帮助的类中重用它们 代码片段如下 MyTestClass py Class MyTestClass unittest TestCase classmethod def
  • 如何调整 Keras、TensorFlow(非通用方法)中的数字隐藏层大小?

    我打算找到 Keras 模型隐藏层大小的最佳值 次优 由于搜索空间太大 我无法使用 GS 和 RS 等通用算法 有没有适合这个任务的超参数优化算法 None
  • 如何模拟 pyunit 的 stdin 输入?

    我正在尝试测试一个从以下位置获取输入的函数stdin 我目前正在用这样的东西进行测试 cat usr share dict words spellchecker py 以测试自动化的名义 有什么办法可以pyunit可以伪造输入raw inp
  • class="hidden sm:flex" 在 TailwindCSS 中不起作用

    我想通过向特定项目添加隐藏的 sm flex 来使我的导航栏具有响应能力 这意味着它默认会隐藏 但仅在小屏幕及以上屏幕上显示 我做了一些调试 发现隐藏覆盖了所有内容 甚至是响应式变体 其他显示属性适用于响应式变体 这是我的代码 classN
  • Laravel mssql 驱动程序支持

    我一直在寻找 Laravel 框架的 mssql 驱动程序 但到目前为止还没有运气 我知道 Laravel 对 sql 服务器有 sqlsrv 支持 但我需要的是 mssql 连接器 具有以 mssql 开头的函数 我们不能使用sqlsrv
  • 使用 HTML5 localStorage 在 GWT 应用程序/小部件中缓存

    我正在尝试为我的 GWT 小部件之一合并数据缓存 我有一个数据源接口 类 它通过以下方式从我的后端检索一些数据RequestBuilder和 JSON 因为我多次显示小部件 所以我只想检索一次数据 所以我尝试提供应用程序缓存 天真的方法是使
  • React:获取组件子组件之一的 DOM 位置

    我有一个非常烦人的问题 我需要有关我的组件的帮助 它在这样的上下文中使用 table thead thead tbody tbody table