Я использую функциональный компонент 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;
}
Где я неправ?
Это потому, что .map всегда возвращает массив, поэтому свойство divColor равно:
['#000', '#fff']
Я бы сделал следующее:
{marksId.map((el, index) => <div key = {index} style = {{ background: data[index].color }}>)}
При этом первая метка получит первый цвет в массиве и т.д.
Оооо, мой плохой, я обновлю свой ответ. Я бы не стал использовать useStyle для этого случая и сделал бы встроенный CSS, например: <div key = {index} style = {{ background: data[index].color }}>
Похоже, это работает. Большое спасибо!
в этом случае в className записываются первые буквы слова makeStyles. первый div имеет имя класса «m», второй div имеет «a» и т. д.