Comments 13
Если вы еще раз посмотрите на картинку, то можете заметить такой объект, как Store. Store хранит в себе Reducer’ы.
Store не хранит редьюсеры — это объект с несколькими основными функциями: dispatch, getState, subscribe, через которые осуществляется взаимодействие с состоянием и оповещение о его изменении. Редьюсеры — функции, которые определяют правила обработки веток стейта.
Короче говоря, Reducer знает, как декомпозированно обновлять экран/view.
Редьюсер вообще ничего не знает про то, как обновлять экран/view. Более того — сам Redux об этом ничего не знает. Это библиотека, предоставляющая инструменты для работы со стейтом и она не завязана ни с чем.
Я пытался объяснить по-простому и упрощая некоторые вещи. Твои замечания верны, но такое описание сложно понять, если ты не фронтендер со стажем. В нашем, андроидном, мире всё немного по другому. Поэтому я и написал так, чтобы понятно было тем, кто никогда не видел и не слышал что такое Redux
Редьюсеры — функции, которые определяют правила обработки веток стейта
Там в начале, перед первой главой, есть эпиграф, который говорит, стейт задаёт то, что видит пользователь. Поэтому, когда я говорю, что редьюсер знает как обновить экран, я имею в виду, что он знает как обновить стейт, от которого зависит экран
Ведь чтобы обновить компоненты страницы, необходимо связать данные и представление. Это не задача redux. Если view-слой приложения написан на React, то связывание скорее всего будет осуществляться через hoc-коннектор react-redux (+ опционально reselect), для Vue — Vuex и т.д.
Я надеюсь мы поняли друг друга ;)
Выглядит интересно. Только не понял, где у вас стейт хранится? Допустим хочу на новый экран передать текущий выделенный элемент, где он хранится в рамках фичи?
По стейту вопрос я предусмотрел и ответил в конце статьи в "Вопросы и ответы".
Не очень понял как стейт связан с передачей объекта на следующий экран. Передать объект можно любым способом удобным вам: через интент/аргументы, через синглтон, через компонент даггера, который живёт для этих двух экранов, через базу данных и какой-то ключ экрана. Варианты зависят от потребностей и размера передаваемых данных.
а, понял.
У нас на проекте данных хранятся в объекте, который закрыт интерфейсом(LocalDataSource), за которым может быть как работа с базой, так и мапа в памяти просто. Допустим мы открыли список проектов. Нам пришла модель от бэка, где есть всё, что нам нужно для отображения. Мы её как-то обработали и передали в ScreenNameLocalDataSource. Дальше подписались на изменения этих данных в ActionCreator через соответсвующий интерактор и обновляем экран на основании этих данных.
Архитектура EBA aka реактивность на всю катушку