Что такое канонический способ React + Flux для компонентов идентификатора, которые вызывают изменение состояния?Как определить компоненты, которые вызывают изменение состояния в React + Flux?
У меня есть приложение, которое позволяет пользователю создавать палитры с использованием цветового пространства HSL.
Вот компонент структура моего приложения:
Container (this component gets state and passes it down the chain)
| PalettePicker
| ColorPicker
| Slider (this component fires action)
| Slider
| Slider
| (As many ColorPickers as colors)
| ImageSamples (not relevant, but dependent on palette)
Вот взгляд на ColorPicker
компонента:
Каждый ColorPicker
содержит 3 Slider
компоненты, которые вызывают события, которые обновляют магазин. Затем магазин обновляет палитру и передает всю палитру вниз до компонента Container
, который передает его в виде props
своим дочерним компонентам.
Вот моя функция, которая обрабатывает событие изменения ползунка в моем Store
(я использую рефлюкс):
sliderChange: function(newValue) {
var modifiedPalette = this.palette;
modifiedPalette[newValue.colorIndex][newValue.colorPartsIndex] = newValue.value;
this.trigger(modifiedPalette)
}
Моей палитра представляет собой массив HSL значений цветов, так что-то вроде:
[ [350, 100, 50], [340, 100, 40], ... ]
«Цвет» - это один из массивов из 3 элементов выше, и я называю каждый элемент в цветовом массиве «цветной частью», поскольку он представляет собой цвет H, S или L.
Передача цвета и цветной части индекса вниз, поскольку пропеллер кажется неэлегантным. Я в настоящее время строит компоненты, как это:
colorPickers = palette.map(function(color, i) {
return (
<ColorPicker
key={i}
colorIndex={i}
color={color}
/>
)
});
Насколько я могу сказать, мне нужно пройти colorIndex
как опору так, чтобы мой ребенок компонент может знать, какой цвет в палитре он отображает так что я могу передайте это знание в магазин.
Что такое идиоматический метод React + Flux?
Использование colorIndex - это хорошо. Не следует, чтобы цвет = {this.props.palette [i]} был цветом = {цвет}. –
Спасибо, должен быть {color} –
@MattParrilla, который зависит от того, сколько цветов вы можете изменить сразу. Если только один - вы можете сохранить свойство currentColor в своем магазине и aviod, передавая указатель цветового индекса. Но если вы можете изменить несколько комбинаций - чем у вас есть отношения с одним-двумя магазинами, и я не вижу лучшего способа. На самом деле, почему вы думаете, что это неэлегантно? –