React,获取组件内绑定的父dom元素名称

2024-07-03

在我的组件中,如何访问它嵌套在其中的父组件的名称?

所以如果我的渲染是这样的:

ReactDOM.render(
      <RadialsDisplay data={imagedata}/>,
      document.getElementById('radials-1')
);

我怎样才能找回id name #radials-1从组件本身内部?


将其作为属性传递可能是最有意义的,但是如果您really需要以编程方式获取它,并且从inside组件,你可以等待组件挂载,找到它的 DOM 节点,然后查看它的父节点。

这是一个例子:

class Application extends React.Component {
  constructor() {
    super();
    this.state = { containerId: "" };
  }

  componentDidMount() {
    this.setState({
      containerId: ReactDOM.findDOMNode(this).parentNode.getAttribute("id")
    });
  }

  render() {
    return <div>My container's ID is: {this.state.containerId}</div>;
  }
}

ReactDOM.render(<Application />, document.getElementById("react-app-container"));

工作演示:https://jsbin.com/yayepa/1/edit?html,js,输出 https://jsbin.com/yayepa/1/edit?html,js,output


如果你经常这样做,或者想成为really奇特的是,您可以利用更高阶的组件:

class ContainerIdDetector extends React.Component {
  constructor() {
    super();
    this.state = { containerId: "" };
  }

  componentDidMount() {
    this.setState({
      containerId: ReactDOM.findDOMNode(this).parentNode.getAttribute("id")
    });
  }

  render() {
    if (!this.state.containerId) {
      return <span />;
    } else {
      return React.cloneElement(
        React.Children.only(this.props.children),
        { [this.props.property]: this.state.containerId }
      );
    }
  }
}

ContainerIdDetector.propTypes = {
  property: React.PropTypes.string.isRequired
}

// Takes an optional property name `property` and returns a function. This
// returned function takes a component class and returns a new one
// that, when rendered, automatically receives the ID of its parent
// DOM node on the property identified by `property`.
function withContainerId(property = "containerId") {
  return (Component) => (props) =>
    <ContainerIdDetector property={property}>
      <Component {...props} />
    </ContainerIdDetector>
}

Here, withContainerId是一个带有参数的函数property并返回一个新函数。该函数可以将组件类型作为其唯一参数,并返回高阶组件。渲染时,新组件将渲染passed组件及其所有原始 props,加上一个附加 prop,在由 指定的属性上指定父容器的 IDproperty争论。

如果您愿意,您可以将它们与 ES7 装饰器(当前实现的)一起使用,或者通过常规函数调用:

@withContainerId()
class Application extends React.Component {
  render() {
    return <div>My containers ID is: {this.props.containerId}</div>;
  }
}

// or, if you don't use decorators:
//
// Application = withContainerId()(Application);

ReactDOM.render(<Application />, document.getElementById("react-app-container"));

工作演示:https://jsbin.com/zozumi/edit?html,js,输出 https://jsbin.com/zozumi/edit?html,js,output

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

React,获取组件内绑定的父dom元素名称 的相关文章

  • 如何在React Native中重用React JS组件

    我是新来的React JS 我正在尝试构建一个网络应用程序 该应用程序也应该在移动设备 Android 和 IOS 上运行 因此考虑使用react js for web application并创建了一些组件 那么是否可以使用React j
  • React:无法使用 useContext 挂钩在 app.js 中设置上下文状态

    我无法在 app js 中设置上下文状态 我以某种方式在其中获得空值 但可以在子组件中访问它 我想在用户访问页面时在 app js 中设置上下文状态 以便我可以在整个应用程序中使用它 例如根据用户是否登录显示不同的标题 根据请求的沙盒 UR
  • TabPanel:警告:validateDOMNesting(...):

    当我使用 Material ui 代码中的选项卡时效果很好 但是当我使用网格和排版自定义 TabPanel 时遇到此警告 我明白了这个问题 div 不能放在里面 p 但需要在 TabPanel 内部进行自定义的解决方案 我需要有这样的东西
  • 更改材质表反应中“操作”的样式

    我一直在我的一个项目中使用材料表 虽然我可以更改用户定义列的样式 字体大小 颜色 但我无法对 操作 列执行此操作 我对更改字体大小特别感兴趣 与分页相同的问题 我需要更改其字体大小 但似乎没有可用的选项 请举一个例子 https mater
  • 如何在reactjs应用程序中包含bootstrap css和js?

    我是 ReactJS 新手 我想在我的 React 应用程序中包含 bootstrap 我已经安装了引导程序npm install bootstrap save 现在 想要在我的 React 应用程序中加载引导 CSS 和 JS 我正在使用
  • 无法解析 primereact 下拉列表中的“react-transition-group”

    我收到以下错误 Failed to compile node modules primereact components dropdown DropdownPanel js Module not found Can t resolve re
  • 注入表单元素后重新加载 DOM?

    我正在尝试编写一些 jQuery 代码 一旦用户执行某个操作 这些代码就会将表单元素 输入复选框 添加到表单中 稍后用户可以提交此表单 我对 jQuery 完全陌生 但我已经成功地组合了一些几乎可以工作的代码 这是我所得到的 someDiv
  • 如何通过PHP获取div?

    我得到一个页面使用file get contents来自远程服务器 但我想过滤该页面并从中获取一个使用 PHP 具有 text 类的 DIV 我开始于DOMDocument但我现在迷路了 有什么帮助吗 file file get conte
  • ReactJS:从子级和父级控制子级状态

    我有一个相当简单的问题 我不知道如何用 React 的单向数据流来解决它 假设您在父级中有一个显示模式的链接 在模式中 有一个 X 将其关闭 我知道我可以通过 props 从父级更改模式的状态 In the parent
  • React - 显示隐藏两个元素而不在页面加载时闪烁

    Edit 我重写了代码 使其更加简约 下面的代码是我的问题的尖峰测试 这是该问题的视频 https i stack imgur com EhItK jpg https i stack imgur com EhItK jpg 我有两个组件 第
  • WebSockets 请求中请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]

    这个问题在这里已经有答案了 我有大量关于如何在 Java Spring 中配置 CORS 的示例 但它仍然无法在具有 websockets 请求的项目中工作 它适用于 mcv api 路径 但我的 websockets 路径返回错误 加载失
  • Reactjs 停留在安装 React Dom、react-templates 上

    我已经安装了nodejs 然后我尝试使用npx create react app my app创建react is app 但它只是停留在安装react dom cra templates上 然后我也尝试了npm 但它是相同的 请帮助需要学
  • React Native + Appium iOS elementByAccessibilityId.text()

    我正在使用 Appium Jest 为 Android 和 iOS 编写 React Native 测试 这是我的 React Native 元素
  • 发出 axios get 请求时出现无限循环

    当我使用 Axios 向 api 发出 get 请求时 我在 useEffect 挂钩中遇到无限循环 并且我确信添加第二个选项 会告诉它只运行一次 有什么我遗漏或忽视的吗 console log 向我显示它正在无限循环 import Rea
  • 重新混合水合作用失败:服务器和客户端上的 UI 不匹配

    在本地没问题 已知警告并且 CSS 渲染良好 但在 Vercel 上我的 Remix 应用程序收到此错误 水合失败 因为初始 UI 与原来的 UI 不匹配 在服务器上渲染 业务逻辑运行良好 但 CSS 完全损坏 2022 年 6 月 26
  • JavaScript 中的 DOM 和 BOM 是什么?

    JavaScript 中的 DOM 和 BOM 是什么 如果有人能用通俗易懂的语言解释这些 那就太好了 我喜欢对这些有更深入的了解 BOM 浏览器对象模型 由以下对象组成navigator history screen location a
  • React:将组件存储在对象中

    我的用户配置文件中有几十个字段 我正在尝试构建一种有效的方法来在适当的输入表单组件中显示它们 例如 配置文件可能如下所示 profile1 name Cornelius Talmadge phone 1 如果我可以像这样堆叠组件 expor
  • React JS 拒绝加载图像,因为它违反了以下内容安全策略指令

    当我尝试重新加载反应应用程序网页时 我遇到了这个问题 注意 在开发阶段 此类事情没有问题 但是当我将其部署到生产时 我遇到了这个问题 谢谢 Refused to load the image http 104 248 153 121 808
  • 根据组成员身份显示内容 - OKTA + ReactJS

    我正在使用 Okta 进行 SPA Express 后端 的用户身份验证 如何使用 Okta API 根据组成员身份显示 隐藏内容 例如如果活动用户是特定组的成员 我想显示一些菜单项 Okta React SDK 中有什么东西吗 我的想法很
  • scrollIntoView 滚动得太远

    我有一个页面 其中包含从数据库动态生成的带有 div 的表行的滚动条 每个表格行的作用就像一个链接 有点像您在视频播放器旁边的 YouTube 播放列表中看到的那样 当用户访问该页面时 他们所在的选项应该位于滚动 div 的顶部 此功能正在

随机推荐