React 入门教程 querySelectorAll() 方法遇到的问题

querySelector与querySelectorAll:DOM操作的范式迁移 CSS选择器是前端开发的基础能力,其语法被querySelector和querySelectorAll完整复用,将样式定位逻辑直接映射为DOM查询能力。这种同构性不仅提升代码可读性与维护性,更带来性能优化与工程健壮性的双重价值——通过作用域限定、属性选择器、伪类状态匹配等技术,精准控制动态DOM结构。在响应式布局、表单交互、轮播组件及液态玻璃等现代UI场景中,它替代了getElementById等传统API的碎片化操作,成为中高级前端工程师实现高效、可扩展DOM操作的事实标准。 阅读详情

虽然是英文版的,但是写得简洁明了。
https://reactjs.org/docs/add-react-to-a-website.html
打开页面之后,搜索: Reuse a Component 找到复用组件这一节。
点击这一节中的:Download the full example (2KB zipped)
代码很小,只有两个文件,直接在浏览器打开 index.html 即可看效果。

存在的问题

在浏览器中,并没有看到动态生成的 Like 按钮。
由于这种写法不使用 IDE,没有报错信息,排查 bug 比较难。

问题原因和解决方法

首先获取 querySelectorAll() 方法的返回结果,看看元素个数:

var containerList = document.querySelectorAll('.like_button_container');
var containerNum = containerList.length;
// 用这种方法来查看 log :创建一个按钮,点击之后显示 log
const domContainer = document.querySelector('.like_button_container');
const commentID = parseInt(domContainer.dataset.commentid, 10);
ReactDOM.render(e(LikeButton, { commentID: containerNum}), domContainer);

发现 containerNum = 3 也就是说,找到了所有的元素。

第一个秘密

通过实验发现,querySelectorAll() 和 querySelector() 方法的参数规律:’#like_button_container’ 搜索的是 id,’.like_button_container’ 搜索的是 class。
在这篇教程中,第一个实例使用的是 id,第二个实例使用的是 class。

// 第一个实例使用的是 id
<div id="like_button_container"></div>
// 第二个实例使用的是 class
<div class="like_button_container" data-commentid="1"></div>
<div class="like_button_container" data-commentid="2"></div>
<div class="like_button_container" data-commentid="3"></div>

第二个秘密

既然找到了所有的元素,为什么没有生成 Like 按钮呢?
通过实验发现:实例中的 forEach 这种遍历方式不行,改为 for 循环并且循环体内用 var 定义变量就好了。

// 这种遍历方式不行
// containerList.forEach(domContainer => {
//     // Read the comment ID from a data-* attribute.
//     const commentID = parseInt(domContainer.dataset.commentid, 10);
//     ReactDOM.render(
//       e(LikeButton, { commentID: commentID }),
//       domContainer
//     );
//   });

// querySelectorAll() 方法得到的是一个 NodeList 这种遍历方式可以 
for (var i=0; i < containerNum; i++){
  // 用 const 不行,用 var 就好了 
  var domContainer = containerList[i];
  var commentID = parseInt(domContainer.dataset.commentid, 10);
  ReactDOM.render(e(LikeButton, { commentID: commentID}), domContainer);
}

在实例给的代码中,把 forEach 中的 const 改为 var 也不行。

刚刚入门,欢迎大牛拍砖~~~

京东风控算法工程师带你解读Action Model-精细化运营(上篇) 电影《蝴蝶效应》中,男主拥有回到童年改变过去的能力,虽然在剧中男主一次次穿越时空拯救世界,但由于他无法预见自己做出的抉择对未来产生的其他影响,最终还是没能阻止悲剧的发生。可见,一个好的决策需要衡量其对未来产生的影响。JDD风控算法团队本期为大家解惑最优决策难题的解决方法-Action Model。 阅读详情

相关推荐

TCN实战:用Python手把手搭建时序预测模型(附完整代码)

本文详细介绍了如何使用Python搭建TCN(Temporal Convolutional Network)时序预测模型,包括数据预处理、模型架构实现、训练调优及预测评估。通过完整的代码示例和实用技巧,帮助开发者快速掌握TCN在时间序列预测中的应用,特别适合处理长期依赖问题。

weixin_29041195的博客 372

React Hooks基本使用详解

React Hooks基本使用详解 Hooks let you use state and other React features without writing a class Hooks可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 一、类组件不足: 状态难以复用(渲染属性Render Props、高阶组件HOC、Mixin、Hooks可以解决这个问题)在hooks出来之前,常见的代码重用方式是 HOC 和render props,这两种方式带来的问题是:你

LittleRoundFace的博客 839

晶圆测试(wafer sort)全流程解析:从探针卡到良率统计的实战指南

本文详细解析了晶圆测试(wafer sort)的全流程,从探针卡选型到良率统计的实战指南。涵盖了12英寸先进制程产线的关键技术,包括探针卡系统、测试程序开发、产线自动化集成及数据分析,特别聚焦多站点并行测试的时序优化和接触阻抗异常排查,帮助工程师提升测试效率与准确性。

weixin_29279153的博客 731

React项目知识积累(二)

是 JavaScript 中的一个内置方法,用于选择多个元素并返回一个 NodeList 对象。在上述例子中,选择了所有元素,并将它们存储在一个NodeList对象中。可以使用length属性获取所选元素的数量,并使用索引获取每个元素的属性和内容。需要注意的是,返回的是一个静态的 NodeList 对象,这意味着如果匹配的元素发生变化,NodeList 不会自动更新。如果需要动态更新匹配的元素列表,请使用或者其他动态查询节点的方法。

吃蛋糕的居居 707

矩阵束(Matrix Pencil)入门:从通信系统到控制理论,它为何是建模利器?

本文深入探讨矩阵束(Matrix Pencil)在通信系统与控制理论中的关键作用,揭示其作为复杂系统建模利器的独特价值。从MIMO系统的多径干扰分析到电力系统稳定性判据,矩阵束通过`A-λB`方程求解提供精准建模方案,显著提升5G通信和工业控制等领域的性能表现。

weixin_30134145的博客 358

LwIP在国产MCU的落地实践:从协议栈优化到网络稳定性实战

本文详细介绍了LwIP协议栈在国产GD32F407 MCU上的移植与优化实践,涵盖硬件平台选择、驱动适配、协议栈调优和网络稳定性提升策略。通过内存管理优化、实时操作系统集成和性能测试,为工业物联网应用提供高可靠性网络通信解决方案,显著提升数据传输效率和系统稳定性。

m2n3b4v5c6的博客 270

querySelectorAll和querySelector 选取不到元素

前端开发过程中遇到的问题

暂无 2457

Diebold-Mariano检验

给定两个预测的预测结果,我们希望比较他们的预测结果,以用于预测模型精度的比较。 Diebold-Mariano检验本质是一个t检验,用于检验替代预测的两个损失序列的平均值是否相等。即,它是一系列损失差的零均值的t检验。在存在自相关的情况下,它使用损失差分时间序列标准差的自相关一致性估计。 注意,在使用DM检验式时,假设损失序列是平稳的。 另外,DM检验在小样本数据时往往会拒绝零假设。对于小样本数据,推荐Harvey, Leybourne and Newbold (HLN)检验【1】; 参考文献 【1】htt

weixin_43948357的博客 6565

React实现全选和反选的按钮

做一个全选和反选的按钮吧。对于全选,想实现的效果是:1、全选按钮是选中时,所有选项都被选中;2、全选按钮是未选中时:所有按钮都设置未选中.......

Eric_miaomiao的博客 731

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 343

华为OD机试真题 新系统2026-04-01 C++ 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 381

事件捕获与冒泡(react,vue,原生)

react vue js原生事件,默认都是以冒泡的形式触发。 事件流 总是以 先捕获 从根节点 —> 祖父节点 —> 节点本身 后冒泡 节点本身 —> 祖父节点 —> 根节点 所有的事件都是默认冒泡触发,在捕获阶段不会触发。 如果将该事件设置为捕获,那么该事件则不会在冒泡阶段触发。 vue代码 <div @click = "divClick"> <a href="www.baidu.com" @click="linkClick"

秋来九月八 2212

总结个人关于雷达样式的见解(脉内脉间调制)

概述 雷达有各种各样的脉内脉间调制样式,对于雷达的设计者来说,不外乎三个目的: 1、增加雷达性能,如提高测距精度,增大侦察距离等; 2、雷达的工作机制决定雷达必须采用此种样式的调制,如有些SAR雷达为保证径向测距精度,需要使用脉内宽带调制信号; 3、降低雷达被电子战装备截获的概率,也就是LPI设计。 对于雷达对抗方,则只会观察到信号存在脉内及脉间的调制。对于一般的雷达信号,通常只采用脉内调制,脉间频率调制,脉间PRI调制。 脉间调制类型 1、PD雷达的脉间特征 雷达进行脉间调制的主要是PRI..

年糕的博客 3万+

DOMException: Failed to execute ‘querySelectorAll‘ on ‘Document‘ is not a valid selector 报错处理

DOMException: Failed to execute ‘querySelectorAll’ on ‘Document’ is not a valid selector 报错处理 问题过程 今天开发过程中,遇到一个报错信息: react-dom.production.min.js:5058 DOMException: Failed to execute ‘querySelectorAll’ on ‘Document’: ‘0bb64d67-b455-4130-9b73-55eda6a1975c8Bu

MichaelAn的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Reactjs-popup源码解析:深入理解弹窗组件的实现原理

想要在React应用中快速实现弹窗功能吗?Reactjs-popup是一个强大的React弹窗组件库,它集成了模态框、工具提示和菜单功能于一体。这个轻量级的库仅3KB大小,却提供了完整的弹窗解决方案,让开发者能够轻松创建各种交互式弹窗组件。本文将深入解析Reactjs-popup的源码实现,帮助你全面理解这个优秀弹窗组件的内部工作原理。 ## 核心架构设计:弹窗组件的基石 Reactjs-po

gitblog_00474的博客 375

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

如何简写出 document.querySelectorAll?

看了一篇风趣幽默的文章,简单记录一下~ 1.原生DOM选择器 document.getElementById document.getElementsByClass document.getElementsByName document.getElementsByTagName 写出来我都感觉麻烦了~接下来看看jQuery的语法糖 2.jQuery封装的DOM选择器 document.querySelector document.querySelectorAll 但是,名字太长了,就像电影里

在下魔王ii的博客 720

在vue/react项目中单独引入一个js文件,在js文件中使用DOMContentLoaded函数querySelectorAll为空数组解决办法

在Vue3中直接获取DOM元素可能失败,因组件异步渲染。提供三种解决方案:1)使用MutationObserver监听DOM变化;2)轮询检查元素是否存在(示例代码展示轮询实现);3)通过自定义事件在Vue渲染完成后通知。推荐第一种方法,示例同时展示了轮询和自定义事件的具体实现方式,帮助开发者解决在Vue中获取动态渲染DOM元素的问题。

392

querySelector与querySelectorAll:现代DOM操作的核心选择器API

CSS选择器是前端开发者定位网页元素的基础技术概念,其原理源于浏览器样式引擎的高效匹配机制;技术价值在于以声明式语法替代手动遍历,显著提升代码可读性、维护性与运行性能;应用场景覆盖单页应用动态渲染、组件化开发局部查询、表单验证、事件委托及Shadow DOM操作等工程实践;本文深入解析querySelector(获取首个匹配元素)与querySelectorAll(获取静态节点列表)的设计哲学、作用域控制、错误处理及与现代框架协同方案,聚焦CSS选择器在真实项目中的高可靠落地。

weixin_33834628的博客 434

js getElementsByClassName与querySelector querySelectorAll的区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34074740的博客 264

querySelectorAll 遍历

直接 forEach document.querySelectorAll('p').forEach(i=>console.info(i)) 如果不能直接 forEach querySelectorAll 返回的是 NodeList 无法直接 forEach 遍历。但是。。。貌似现在可以了。难到是浏览器都升级支持了? 利用展开 [...document.querySelectorAl...

灵台方寸山斜月三星洞 3280

前端常见问题以及处理方式 - - - (七) 获取dom节点方法

HTML常用获取dom节点的方法

业余丰富各种技术栈 1万+

获取react中iframe的里面的图片

在上面的代码中,我们首先通过document.getElementById获取到id为my-iframe的iframe元素,然后通过contentWindow.document获取iframe内部的文档对象。在上面的代码中,我们使用了iframe-resizer库来自动调整iframe的高度,并在iframe加载完成后调用handleIframeLoad函数来获取其中的图片。这样可以帮助直接操作iframe中的子元素,而不用考虑iframe的HTML结构和跨域访问的问题。

hoiii187的博客 248

选项卡专题:原生js和react

如何使用原生js和react编写选项卡?

weixin_62227445的博客 467

React JSX 语法解析与组件化开发实践

JSX 是 React 生态中的核心语法糖,它将类似 HTML 的标记转换为标准的 JavaScript 函数调用。这种语法转换通过 Babel 等构建工具完成,最终生成 React.createElement() 调用。JSX 的价值在于提升 UI 代码的可读性和开发效率,同时保持 JavaScript 的完整表达能力。在组件化开发中,React 通过函数组件和类组件两种形式实现 UI 复用,配合 Hooks 机制可以管理状态和副作用。这些特性使得 React 成为构建现代 Web 应用的主流选择,特别适

weixin_33691817的博客 324

QuerySelector/QuerySelectorAll和getElementById/getElementsByClassName的区别

在React、Vue框架流行的今天,操作DOM这种方式已经用的比较少了,不过工作中有时候还是会用到的。今天就来说一下QS/QSA和GEBI/GEBC(这里为了方便偷个懒使用了缩写)的区别。 1. 兼容性: 上图是我从大名鼎鼎的Can I Use上截的图,可以看到各个浏览器对于这几种的支持情况。 结论: 如果你不考虑兼容特定版本的浏览器,这一点你可以忽略。 2. 效率: 首先我们来比较 GEB...

weixin_33782386的博客 694

JavaScript中获取第X个元素的正确姿势:从querySelectorAll到nth-child全解析

在Web开发中,精准定位页面中的特定DOM元素(比如列表第3个商品、表格第5行)是高频且容易出错的场景。无论是用querySelectorAll配合数组索引,还是借助nth-child这类CSS选择器,核心都在于理解“第X个”的语义边界。技术实践中,静态快照与动态集合的差异、nth-child与nth-of-type的计数规则、复杂过滤条件下的索引偏移,都可能让结果与预期不符。掌握这些基础原理不仅能提升开发效率,还能在动态页面、长列表渲染等复杂场景下避免隐性Bug。从原生DOM操作到Vue/React框架的

weixin_29534421的博客 246

Browser Harness 实战:用 CDP 原生按键攻克 Shopify Polaris React 表单的受控组件陷阱

Shopify 后台(Shopify Admin)基于其设计系统 Polaris 构建,其 React 受控输入组件会拒绝浏览器自动化中最常见的“合成 value setter”赋值模式——字段虽显示文本,但 Save/Submit 按钮始终禁用。本篇基于 Browser Harness 项目在 [polaris-inputs.md](https://link.gitcode.com/i/9e81

gitblog_00694的博客 416
上一篇: 学习新技术,需要付费上培训班吗?
下一篇: 本源思维与个人发展
勇敢的仙人掌
博客等级 码龄15年 41粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值