javascript - 是否有理由括号运算符 [] 可能无法在反应组件中与 getElementsByClassName() 一起使用?
问题描述
我正在构建一个小型反应应用程序,其中包含许多编程语言和课程的列表。每个列表元素将包含一个背景图像,该背景图像由其相应徽标的一个“精灵”png 图像提供。我没有给每个 div 一个 id 来添加背景图像并设置图像的位置,而是给了所有这些类languages
,我将为其快速设置背景 url() 然后定位。
我试图从我的外部样式表中直接设置语言类的背景 url,但是当它使用 webpack 构建时,由于某种原因,链接不会到达我的 public/images 文件夹。我决定将其与我的组件文件链接起来。
我遇到的问题是当我尝试设置
const languageElements = document.getElementsByClassName("languages");
调用 console.log(languageElements) 时,我看到它返回一个 HTMLCollection[] 数组,我可以清楚地看到我的元素。
但是,当我调用它时,console.log(languageElements[0])
它出人意料地返回未定义。
我在这里错过了什么吗?这与反应有关吗?
import React, { Component } from "react";
import "../styles/Center.scss";
class Center extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
console.log("Center Mounted Successfully.");
}
render() {
const languageElements = document.getElementsByClassName("languages");
console.log(languageElements);
languageElements[0].style.background = "url(../images/full-languages.png)";
return (
<>
<section>
<ul>
<li>
CS1022: <span className="languages cpp" />
</li>
<li>
CS1030:
<span className="languages c" />
<span className="languages cpp" />
</li>
<li>
CS1410:
<span className="languages html" />
<span className="languages css" />
<span className="languages js" />
</li>
<li>
CS2350: <span className="languages java" />
</li>
<li>
CS2420: <span className="languages java" />
</li>
<li>
CS2550: <span className="languages sql" />
</li>
</ul>
</section>
</>
);
}
}
export default Center;
我希望使用括号运算符允许我访问 HTMLCollection[] getElementsById() 返回中的每个元素。
解决方案
您应该在https://reactjs.org/docs/react-component.html了解 React 组件生命周期
const languageElements = document.getElementsByClassName("languages");
这个选择器发生在 render() 方法中,没有渲染,所以 languageElements 将变空。尝试将您的代码放在 componentDidMount()
推荐阅读
- java - JUnit 问题/NullPointer 异常
- powershell - 将参数从一个 powershell 脚本传递到另一个
- java - 没有 JDK 的人可以运行使用控制台进行 i/o 的程序(并且没有其他用户界面或显示)吗?
- r - 使用 R 中的 ggplot2 在多面、闪避的条形图上的每个条形上的文本居中对齐
- google-cloud-platform - Google Cloud Speech-to-Text API - 多说话人识别?
- java - 方法泛型返回java类
- java - 如何从类文件中提取公共构造函数、方法和变量
- python - 根据具有空白行的列向数据框添加新列
- deep-learning - pytorch seq2seq 编码器正向方法
- riscv - 火箭芯片仿真显示意外指令数