Моя проблема в том, что функция не находит имя класса, которое я пробовал с идентификатором, но возникает та же ошибка. Как мне решить эту проблему или как мне сделать, чтобы моя функция «видела» класс, возможно, это простая ошибка, но я не нахожу проблему
return(
...
<div className = "midia-wrapper">
{renderFile()}
</div>
...
<button onClick = {changeBackground} className = "change-background">
Change Background <i className = "fas fa-palette"></i>
</button>
Джаваскрипт и css
function changeBackground() {
const randomnumber = Math.floor(Math.random()*10)
const back = document.getElementsByClassName("midia-wrapper");
switch(randomnumber) {
case 1:
back.body.style.backgroundColor = "#ffffff";
break;
case 2:
back.body.style.backgroundColor = "#000000";
break;
case 3:
back.body.style.backgroundColor = "#008bb2";
break;
case 4:
back.body.style.backgroundColor = "#0935B3";
break;
case 5:
back.body.style.backgroundColor = "#B33212";
break;
case 6:
back.body.style.backgroundColor = "#B38612";
break;
default:
back.body.style.backgroundColor = "#ffffff";
}
}
getElementsByClassName("midia-wrapper")
результатом являются все элементы DOM, которые имеют имя класса midia-wrapper
, поэтому вы должны указать, используя индекс массива.
back[0].style.backgroundColor = "#ffffff";
Как упоминалось в моем комментарии, в React вы не получаете доступ к DOM напрямую; способ сделать то, что вы хотите сделать, это:
import React, { useState } from "react";
const selectRandomColor = () => {
const randomnumber = Math.floor(Math.random() * 10);
switch (randomnumber) {
case 1:
return "#ffffff";
case 2:
return "#000000";
case 3:
return "#008bb2";
case 4:
return "#0935B3";
case 5:
return "#B33212";
case 6:
return "#B38612";
// ...
default:
return "#ffffff";
}
};
const MyComponent = () => {
const [bgColor, setBgColor] = useState(selectRandomColor());
return (
<React.Fragment>
<div className = "midia-wrapper" style = {{ backgroundColor: bgColor }}>
{renderFile()}
</div>
<button
onClick = {() => setBgColor(selectRandomColor())}
className = "change-background"
>
Change Background <i className = "fas fa-palette"></i>
</button>
</React.Fragment>
);
};
export default MyComponent;
Вы должны изменить подход; с React вы не получаете доступ к DOM напрямую, но вы полагаетесь на состояние, реквизиты и, если вам действительно нужно, ссылки. Что вы можете сделать, так это заставить вашу функцию
changeBackground()
изменить локальное состояние и установить для нее сгенерированный цвет; затем обратитесь к этому состоянию, чтобы установить цвет фона