#reactjs #react-hooks
Вопрос:
У меня есть список продуктов, которые я хочу отобразить в виде карточки. Фон карты должен быть таким: Зеленый, Синий, Красный, Фиолетовый, Зеленый, Синий, Красный, Фиолетовый и т. Д. и т. Д.
products.map(item =gt; ( lt;div style="background-color: {bgColor}"gt; lt;h1gt;{item.name}lt;h1gt; lt;/divgt; { bgColor === 'green'amp;amp; setBgColor('blue')} { bgColor === 'blue' amp;amp; setBgColor('red')} { bgColor === 'red' amp;amp; setBgColor('purple')} { bgColor === 'purple' amp;amp; setBgColor('blue')} ))}
Этот код, очевидно, не работает, потому что он окажется в бесконечном цикле.
Но, по сути, я бы хотел, чтобы функция map учитывала, в каком состоянии находится цвет, и для СЛЕДУЮЩЕГО рендеринга в массиве продуктов изменила цвет на другой.
Логически, я пытаюсь сказать приведенный ниже код для каждого элемента карты
if (bgColor === 'green') { setBgcolor: 'blue' return } if (bgColor === 'blue') { setBgcolor: 'red' return } if (bgColor === 'red') { setBgcolor: 'purple' return } if (bgColor === 'purple') { setBgcolor: 'green' return }
Однако я открыт для совершенно других методов реализации этого..
Комментарии:
1. Рефакторинг вашей функции: создайте локальную переменную, содержащую копию bgColor. Затем используйте логику, которая изменяет цвет BG. Затем верните div, который использует ранее сохраненную локальную переменную.
Ответ №1:
Если я правильно понял вашу проблему, вы можете создать карту цветов на основе остатка, когда разделите элемент index
на 4.
Этот код должен отображаться «синим», когда индекс элемента равен 0/4/8… и т. Д.
const colorMap = { 0: 'blue', 1: 'red', 2: 'green', 3: 'purple' } products.map((item, index) =gt; ( lt;div style="background-color: {colorMap[index % 4]}"gt; lt;h1gt;{item.name}lt;h1gt; lt;/divgt; ))}
Комментарии:
1. Спасибо, это было то, что я искал. Я попытался использовать функцию по модулю, но я не делил на 4.Я проверял, есть ли индекс/1 === 1, индекс/2 ===2, что было проблемой в любое время, когда вы проходили 4.