Реакция и вопрос Javascript, кнопка изменения цвета фона

Моя проблема в том, что функция не находит имя класса, которое я пробовал с идентификатором, но возникает та же ошибка. Как мне решить эту проблему или как мне сделать, чтобы моя функция «видела» класс, возможно, это простая ошибка, но я не нахожу проблему

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";
      }

  }

Вы должны изменить подход; с React вы не получаете доступ к DOM напрямую, но вы полагаетесь на состояние, реквизиты и, если вам действительно нужно, ссылки. Что вы можете сделать, так это заставить вашу функцию changeBackground() изменить локальное состояние и установить для нее сгенерированный цвет; затем обратитесь к этому состоянию, чтобы установить цвет фона

secan 10.12.2020 15:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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;

Другие вопросы по теме