Как создать стиль из массива объектов с помощью material-ui

Я использую функциональный компонент reactjs. У меня есть массив объектов, в которых указаны стили

const data = [
        {
            id: 1,
            color: '#000'
        },
        {
            id: 2,
            color: '#fff'
        }
        // etc
    ]

Мне нужно отобразить на странице столько элементов, сколько объектов в массиве данных, и каждый элемент получает свой уникальный цвет (первый элемент получает цвет от первого объекта, второй от второго и т. д.).

Для этого я использую пользовательский хук useStyles из material-ui.

const useStyles = makeStyles((theme) => ({
    divColor: {
        background: data.map((el) => (
            el.color
        )
        )
    }
}));

Я расширяю саму часть HTML следующим образом

{data.map((el, index) => <div key = {index} className = {classes.divColor} />)}

В этом случае у меня есть 2 одинаковых элемента div с одинаковым свойством.

.makeStyles-startAccident-4 {
    background: #000, #fff;
}

Пример CodeSandBox

Где я неправ?

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
914
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это потому, что .map всегда возвращает массив, поэтому свойство divColor равно:

['#000', '#fff']

Я бы сделал следующее:

{marksId.map((el, index) => <div key = {index} style = {{ background: data[index].color }}>)}

При этом первая метка получит первый цвет в массиве и т.д.

в этом случае в className записываются первые буквы слова makeStyles. первый div имеет имя класса «m», второй div имеет «a» и т. д.

Miltosh 11.12.2020 22:45

Оооо, мой плохой, я обновлю свой ответ. Я бы не стал использовать useStyle для этого случая и сделал бы встроенный CSS, например: <div key = {index} style = {{ background: data[index].color }}>

Chandelier Axel 11.12.2020 23:00

Похоже, это работает. Большое спасибо!

Miltosh 11.12.2020 23:08

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