Если кратко и максимально просто:
Состояние:
Redux это один большой javascript-объект с полями, которые представляют собой стейт - состояние (initial state - начальное состояние), которое может меняться. Эти поля (состояния) запрещено обновлять напрямую.
Редюсеры:
Обновляется состояние с помощью функций которые называются редьюсерами. Это обычные функции, отличие только в том, что они должны быть
чистыми. Задача редюсера принять на вход старый стейт и отдать на выход новый стейт (часть стейта). Редьюсер обычно создается под каждое новое поле в стейте.
Таким образом, когда нужно обновить стейт, вызывается редюсер.
Функция dispatch:
Но редюсер тоже вызывается не напрямую, а через функцию dispatch. Функция dispatch вызывается и в нее передается объект называемый экшеном (action).
Экшен:
Action это обычный js-объект, у которого должно быть поле type с типом экшена и другие поля с какими-нибудь данными (обычно поле data).
Этот экшен-объект передается от dispatch в редьюсер. Как редьюсер будет вычислять новое состояние зависит от разработчика. Но обычно редюсер просто смотрит на тип экшена и на его основе и на основе входных данных возвращает новое состояние.
Сам компонент обновляется путем обертывания его в функцию connect. Функция connect пробрасывает нужные поля из стейта в компонент в виде props (mapStateToProps).