Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检查Dom元素或React组件

如何检查Dom元素或React组件
EN

Stack Overflow用户
提问于 2017-04-12 10:22:15
回答 2查看 5.3K关注 0票数 6

在创建HOC时,我不确定会包装哪种组件,有时它是另一个React组件,有时它可能是一个普通的DOM元素,如lia

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WrappedComp = myHOC(BaseComponent)

MyHOC会将额外的道具传递给包装的组件,在大多数情况下,这将按其应有的方式工作。

但有时,当BaseComponent是li时,它不会接受额外的道具,React会抛出一个警告Unkown Prop Warning,说明DOM元素不接受非标准的dom属性:https://facebook.github.io/react/warnings/unknown-prop.html

那么如何检查BaseComponent是DOM元素还是其他元素呢?如果是的话,我不会把额外的道具传给它。

有没有更好的方法来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2017-04-12 12:44:22

检查BaseComponent是否为React组件,并添加所需的道具。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(BaseComponent.prototype.isReactComponent){
    //add props
}
票数 4
EN

Stack Overflow用户

发布于 2021-06-22 09:11:13

简短回答:

检查元素是否为string类型,以检查元素是否为DOM元素。

检查元素是否为function类型,以检查元素是否为React组件。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  if (typeof BaseComponent.type === 'string') {
    return BaseComponent
  }
  // add props

长篇答案:

正如在the React documentation中定义的,像<li><span>这样的内置组件会导致字符串'li''span'被传递给React.createElement,例如React.createElement("li")

以大写字母开头的类型(如<Foo /> )将编译为React.createElement(Foo),并与JavaScript文件中定义或导入的组件相对应。

因此,React组件的类型为function,而DOM组件的类型为string

下面的WrapperComponent记录每个子元素的typeof child.type。输出为functionstringstring

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function WrappedComponent({children}) {
  return React.Children.map(children, child => {
    console.log(typeof child.type)
    ...
  })
}

const BaseComponent = ({children}) => children

function App() {
  return (
    <WrappedComponent>
      <BaseComponent>This element has type of function</BaseComponent>
      <span>This element has type of string</span>
      <li>This element has type of string</li>
    </WrappedComponent>
  )
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43366843

复制
相关文章
React prop类型检查与Dom
当应用不断增长时,可以用过类型检查发现很多bug。对于某些应用,可以使用JavaScript扩展工具来完成,比如使用  Flow 或 TypeScript 来检查整个工程。除了引入外部工具之外,React也提供了参数类型检查的功能,只需要为每一个属性指定一个 propTypes 即可:
随风溜达的向日葵
2018/08/02
1.7K0
React 元素 VS 组件
在前面的「前端框架」中,我们从Fiber的实现机制描绘了React在页面渲染和数据处理方面做了的努力。其中有很多源码级别的概念。例如,React-Element/React-Fiber/Current Tree 和 workInProgress Tree等。
前端柒八九
2022/08/25
7550
React 元素 VS 组件
React技巧之检查元素是否可见
原文链接:https://bobbyhadz.com/blog/react-check-if-element-in-viewport[1]
chuckQu
2022/08/19
1.1K0
vue3如何获取绑定在组件上的 textarea DOM元素
当我们给自定义组件绑定 ref,想要获取 textarea 元素时,elemtplus 的 input textarea 元素获取方式如上,注意:获取 DOM 必须要在 onMounted 之后获取,否则获取的为 null。
蓓蕾心晴
2023/02/17
1.9K0
React的元素和组件用法详解!
一、元素 React 的最小单位是元素,一旦创建,其子元素、属性等都无法更改。 // 假设 HTML 文件中有个元素: <div id="root"></div> // 创建element元素,传递给React渲染,并加载到父容器(id=root)下 const element = <h1>Hello, world</h1>; ReactDOM.render(element, document.getElementById('root')); 二、组件 组件是有多个元素组成,可以分为 class组
Learn-anything.cn
2021/11/28
7590
React.js 实战之 元素渲染将元素渲染到 DOM 中
与浏览器的 DOM 元素不同,React 当中的元素事实上是普通的对象 React DOM 可以确保 浏览器 DOM 的数据内容与 React 元素保持一致
JavaEdge
2018/12/21
2.7K0
React组件设计实践总结01 - 类型检查
最近准备培训新人, 为了方便新人较快入手 React 开发并编写高质量的组件代码, 我根据自己的实践经验对React 组件设计的相关实践和规范整理了一些文档, 将部分章节分享了出来. 由于经验有限, 文章可能会有某些错误, 希望大家指出, 互相交流.
_sx_
2019/08/07
8.2K0
React组件设计实践总结01 - 类型检查
点击DOM,VSCode就能自动打开对应React组件?
在大型项目开发中,经常会遇到这样一个场景,QA 丢给你一个出问题的链接,但是你完全不知道这个页面 & 组件对应的文件位置。
公众号@魔术师卡颂
2020/12/11
2.4K0
点击DOM,VSCode就能自动打开对应React组件?
如何更优地去创建DOM元素
对面上面那种问题,可能就会想到通过innterHTML方式去创建DOM元素 这里先举个栗子:
IMWeb前端团队
2019/12/03
2.2K1
如何更优地去创建DOM元素
HTML DOM - 元素
如需向 HTML DOM 添加新元素,您首先必须创建该元素,然后把它追加到已有的元素上。
陈不成i
2021/07/21
2.2K0
DOM元素定位
在HTML中有许多如图片等的DOM元素,在网页下拉移动中,DOM元素的位置定位通常通过 position 属性来完成
摸鱼的G
2023/02/22
9950
React 源码深度解读(二):首次 DOM 元素渲染 - Part 2
React 是一个十分庞大的库,由于要同时考虑 ReactDom 和 ReactNative ,还有服务器渲染等,导致其代码抽象化程度很高,嵌套层级非常深。阅读 React 源码是一个非常艰辛的过程,在学习过程中给我帮助最大的就是这个系列文章。作者对代码的调用关系梳理得非常清楚,而且还有配图帮助理解,非常值得一读。站在巨人的肩膀之上,我尝试再加入自己的理解,希望对有志于学习 React 源码的读者带来一点启发。
Dickensl
2022/06/14
3790
React 源码深度解读(二):首次 DOM 元素渲染 - Part 2
React 源码深度解读(一):首次DOM元素渲染 - Part 1
React 是一个十分庞大的库,由于要同时考虑 ReactDom 和 ReactNative ,还有服务器渲染等,导致其代码抽象化程度很高,嵌套层级非常深。阅读 React 源码是一个非常艰辛的过程,在学习过程中给我帮助最大的就是这个系列文章。作者对代码的调用关系梳理得非常清楚,而且还有配图帮助理解,非常值得一读。站在巨人的肩膀之上,我尝试再加入自己的理解,希望对有志于学习 React 源码的读者带来一点启发。
Dickensl
2022/06/14
6170
React 源码深度解读(一):首次DOM元素渲染 - Part 1
React技巧之组件中返回多个元素
原文链接:https://bobbyhadz.com/blog/react-return-multiple-elements[1]
chuckQu
2022/08/19
1K0
React技巧之组件中返回多个元素
React篇(038)-Virtual DOM 如何工作?
1.每当任何底层数据发生更改时,整个 UI 都将以 Virtual DOM 的形式重新渲染。
齐丶先丶森
2022/05/12
2480
React篇(038)-Virtual DOM 如何工作?
React 源码深度解读(三):首次 DOM 元素渲染 - Part 3
React 是一个十分庞大的库,由于要同时考虑 ReactDom 和 ReactNative ,还有服务器渲染等,导致其代码抽象化程度很高,嵌套层级非常深,阅读其源码是一个非常艰辛的过程。在学习 React 源码的过程中,给我帮助最大的就是这个系列文章,于是决定基于这个系列文章谈一下自己的理解。本文会大量用到原文中的例子,想体会原汁原味的感觉,推荐阅读原文。
Dickensl
2022/06/14
4240
React 源码深度解读(三):首次 DOM 元素渲染 - Part 3
React学习(5)—— 高阶应用:prop类型检查与真实Dom操作
当应用不断增长时,可以用过类型检查发现很多bug。对于某些应用,可以使用JavaScript扩展工具来完成,比如使用 Flow 或 TypeScript 来检查整个工程。除了引入外部工具之外,React也提供了参数类型检查的功能,只需要为每一个属性指定一个 propTypes 即可:
随风溜达的向日葵
2018/08/15
1.3K0
React中如何不使用插件实现组件出现或消失动画
首先React本身是有动画插件的React.addons.TransitionGroup,当你使用该组件时,会添加对应的动画生命周期函数来控制动画,分别为componentWillEnter,componentDidEnter,componentWillLeave,componentDidLeave。而更高级点的ReactCSSTransitionGroup则是ReactTransitionGroup是基于ReactTransitionGroup的,在React组件进入或者离开DOM的时候,它是一种简单地执行CSS过渡和动画的方式。
IMWeb前端团队
2019/12/04
2.3K0
jQuery操作DOM元素
作为一个后端程序员,也是要和前端页面打交道的。最常见的场景莫过DOM元素操作和前端页面使用AJAX向服务器发送请求。 实现上述两个功能当然可以使用原生js来完成,但在实际开发过程中很少这样做,通常会使用一些别人封装好的js库来辅助我们的工作,jQuery就是这些辅助库中的一员。
雪飞鸿
2018/09/05
2.7K0
angular获取dom元素
方式一: ViewChild <div #box></div> @ViewChild('box') box: ElementRef; constructor(){ // 不能放在构造函数里面这个时候构造函数中还没有视图没法获取到box元素 } ngOnInit() { console.log(this.box.nativeElement); } 方式二: ElementRef <div class="box"></div> constructor(private el:ElementRef){
用户1437675
2019/05/15
4.3K0

相似问题

React -从子DOM元素获取React组件?

30

如何在React组件中获取DOM元素?

46

在React组件中操作DOM元素

12

在React组件中插入DOM元素

11

如何在React中将dom元素从子组件移动到父组件?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文