Это отличный вопрос и тот, с которым я столкнулся и раньше.
Помните, что самое важное в Flux - это то, что данных в одну сторону, всегда. Вы уже знаете это - я поднимаю его, потому что одно заявление имеет много разъясняющих полномочий и почти полностью отвечает на любой вопрос, который может возникнуть у Flux.
Действия отправляют данные в магазины, поэтому, если вы добавляете логику в свои действия, которая проверяет значение чего-либо в вашем магазине, вы отправляете данные в неправильном направлении, против потока.
Итак, какая часть приложения Flux получает данные из магазинов? просмотров. Вот ваш ответ.
Идея ваших взглядов, имеющих логику кэширования может чувствовать себя странно, но думать о том, что кэширование:
- Мне нужны некоторые данные.
- У меня уже есть эти данные? Если нет ...
- Пойдемте.
Просмотров ручка # 1. Это довольно просто. И № 3, очевидно, обрабатывается вашими действиями. Но, оказывается, №2, по крайней мере, в приложении Flux, также есть что-то, что должно быть рассмотрено в ваших представлениях, или, точнее, ваши -view-view. Представления контроллера являются часто забытой частью Flux, вероятно, потому, что идея контроллеров настолько сильно связана с MVC. Но у Flux есть и их! С Flux сайта:
Контроллеры существуют в потоке приложения, но они контроллер-вид - вид часто встречается в верхней части иерархии, извлечение данных из магазинов и передавать эти данные вплоть до их детей.
Предполагая, что вы используете React, эта идея должна звучать знакомо. Компоненты реакций более высокого уровня являются контроллерами-y, а компоненты нижнего уровня более «чисты».
Другой способ думать об этом - отметить, что действия - это просто помощники диспетчера. (Если я правильно помню, когда Facebook впервые представил Flux, они даже не упомянули о действиях.) К тому времени, когда вы вызвали действие, вы уже приняли решение отправить: единственный вопрос: что, а не если.
Читая эту спину, я понимаю, что все это может показаться различием без различий, но основным выводом является то, что никакие действия не могут проверить состояние магазина. Они могут общаться с ними только через диспетчера. Вы можете найти способ заставить его работать на практике (что нельзя сбрасывать со счетов!), Но это не идиоматический Flux.
Надеюсь, это имеет смысл!
Это, кажется, имеет смысл на высоком уровне, но тогда, если у вас есть много компонентов, которые имеют общий магазин? Вы предлагаете реплицировать эту логику типа кэширования в каждом отдельном компоненте? Для меня это тоже не имеет смысла. – eipark
Если все ваши компоненты выполняют эту же логику кэширования, вы можете захотеть перепроектировать ваши компоненты. Возможно, у базового компонента есть такая логика, что все остальные компоненты, которые полагаются на этот магазин, расширяются. – TheOneWhoPrograms