Подключаем redux

ОБНОВЛЕНИЕ 2018: в учебнике хорошая теория, но ему уже два года. Проверяйте версии пакетов. За выходом нового учебника можно следить в telegram канале или twitter

На канале так же проводятся бесплатные вебинары, публикуются переводы и авторские материалы, присоединяйтесь!

Подключаем redux

Если вы не знакомы с redux, вам поможет этот туториал

npm i --save redux react-redux
npm i --save-dev redux-logger redux-thunk

(вы всегда можете проверить версии в package.json, если что-то вдруг перестало работать. "Мир реакт" активно развивается)

Нам необходимо подговиться для решения следующей задачи:

Пользователь кликает на "Админка".

  • Если пользователь залогинен - пропускаем его на страницу

  • Если пользователь не залогинен - отправлям его на страницу логина

При чем здесь redux? Разве такую задачу мы уже не решили с помощью хука на onEnter?

Это отличный вопрос! Делайте так, как необходимо для приложения, а не просто тащите в проект все модные технологии. Тем не менее, у нашей задачи есть свои цели:

  • во время логина мы сделаем задержку (как будто ждем ответ от сервера), и лишь когда пришел ответ - перенаправим браузер пользователя на /admin

  • роутинг будет выполняться посредством store.dispatch

В итоге, решив данную задачу, у вас будет четкое понимание как сделать любой подобный запрос с редиректом, ведь по факту все сводится к одному и тому же: когда получен ответ - сделай редирект.

(код ниже выполнять не обязательно, так как можно взять исходный код в конце раздела.)

Для начала работы с нашим приложением, необходимо внести множество изменений. Для тех, кто знаком с redux - ничего нового. Тезисно и частично с кодом привожу здесь, так как, возможно вы читаете в формате книги вдали от ПК и хотите повторить какие-то моменты связанные с подключением redux в проект:

  • Обернем <Router /> в <Provider />

src/index.js

  • создаем константы для пользователя

src/constants/User.js

  • создаем actions для пользователя

src/actions/UserActions.js

  • создаем reducer для пользователя

src/reducers/user.js

  • Сразу создадим файл с главным редьюсером, где в будущем сможем "скомбинировать" больше редьюсеров (на данный момент у нас только один)

src/reducers/index.js

  • конфигурируем store

  • добавляем несколько middleware (logger - для логов и thunk - для асинхронных запросов)

src/sotre/configureStore

  • превратим "тупой компонет" <Login /> в "умный компонент" <LoginPage /> (то есть подключим его (connect))

src/containers/LoginPage/index.js

Обратите внимание, что мы стали передавать объект user

До этого момента, мы передавали строку с именем. Так же немного изменилось оформление компонента.

В routes.js изменили подключение <Login /> на <LoginPage />

В будущем вы сможете добавить юзерам роль в проекте и так далее.

На всякий случай, напоминаю, что:

Эквивалентно

Итого: мы подключили redux, создав необходимый каркас для дальнейшей деятельности.

Исходный код на текущий момент. Не забудьте скачать новые зависимости:

и очистить localStorage

Last updated

Was this helpful?