Представьте себе следующее: вы пишете приложение «умный дом», которое управляет температурой в вашем доме.ReactJS - реквизит против штата + дизайн магазина
На мой взгляд, я хотел бы:
- см текущую температуру для каждой комнаты
- набор требуемую температуру для каждой комнаты
- увидеть, включен ли кондиционер вкл/выкл для каждой комнаты
Существует внешнее устройство, связывающее ваше приложение с помощью websockets (оно периодически отправляет текущую температуру, состояние кондиционера).
Я вижу два варианта там:
1) Создать один 'большой' магазин containging структуры данных, такие как:
var _data = [
name: 'Kitchen',
currentTemperature: 25,
desiredTemperature: 22,
sensors: [
{
name: 'Air Conditioning'
state: 'on'
}
... there might be other sensors too ...
]
]
Там будет TemperatureManager компонент (или нечто подобное). Он будет иметь состояние и получать его из магазина периодически. Тогда он просто распределит часть государства своим потомкам (т.е. RoomTemperatureManager, RoomSystemSensorManager), передавая его как реквизит.
Если что-либо изменится (например, температура в спальне), оно при необходимости доставит все данные из магазина и повторно отобразит его потомков.
2) Второе решение
сделать RoomTemperatureManagers и RoomSystemSensorManagers имеют свое собственное государство. Это также связано с наличием автономных хранилищ как для температуры, так и для SystemSensorState.
Эти магазины тогда имели параметризованные геттеры (т.е. getSensorState (roomName)) вместо методов для извлечения всех данных.
Вопрос:
Какой вариант лучше?
Дополнительный вопрос:
Это хорошо для компонентов листа (т.е. один отвечает за управление требуемой температуры) для вызова ActionCreator напрямую? Или, может быть, только Supervising Component должен знать что-либо о ActionCreator и должен передать надлежащий метод как свойство его потомкам?