#javascript #html #css #reactjs
#javascript #HTML #css #reactjs
Вопрос:
Я создаю небольшое приложение react, содержащее список многих языков программирования с курсами. Каждый элемент списка будет содержать фоновое изображение, предоставляемое одним «спрайтовым» png-изображением соответствующего логотипа. Вместо того, чтобы присвоить каждому div идентификатор, чтобы затем добавить фоновое изображение и установить положение изображения, я дал всем им класс languages
, для которого я быстро установлю фоновый URL(), а затем расположу после.
Я попытался напрямую установить фоновый URL-адрес класса languages из моей внешней таблицы стилей, но по какой-то причине ссылка не попадет в мою общедоступную папку / изображения, когда она будет собрана с помощью webpack. Вместо этого я решил связать его с моим файлом компонента.
Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь установить const languageElements = document.getElementsByClassName("languages");
При вызове console.log(languageElements) я вижу, что он возвращает массив HTMLCollection[], для которого я могу четко видеть свои элементы.
Однако, когда я вызываю console.log(languageElements[0])
, он неожиданно возвращает undefined .
Я что-то здесь упускаю? Связано ли это с react?
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().
Комментарии:
1. При первом рендеринге есть ли какие-либо элементы на странице с этим классом?
2. поскольку ваш массив пуст по индексу [0], поэтому его значение не определено
3. Также, что
<>
и</>
предполагается делать? (Возможно, это связано с React.)4. @Pointy при рендеринге этот список отображается на странице. Также, когда console.log(languageElements) показывает полный массив из 9 элементов
5. @Pointy кроме того, я действительно мог бы просто оставить
<>
и</>
на данный момент, поскольку он уже заключен в раздел, обычно они есть во всех моих компонентах, поэтому я помню, где заканчивается компонент, если он становится длинным
Ответ №1:
Вы должны узнать о жизненном цикле компонента React наhttps://reactjs.org/docs/react-component.html
const languageElements = document.getElementsByClassName("languages");
Этот селектор произошел внутри метода render(), в то время как ничего не отображалось, поэтому languageElements станет пустым. Попробуйте поместить свой код в componentDidMount()