Контейнеры и компоненты¶
Прежде чем мы разобьем App.js на компоненты <User /> и <Page /> хотелось бы отметить про способ разделения на "компоненты" и "контейнеры", иначе называемый: деление на "глупые" и "умные" компоненты, "Presentational" и "Container" и быть может как-то еще.
Позволю себе в очередной раз прибегнуть к офф.документации и перевести таблицу различий, которая отлично и кратко отражает суть.
| Компонент (глупый) | Контейнер (умный) | |
|---|---|---|
| Цель | Как это выглядит (разметка, стили) | Как это работает (получение данных, обновление состояния) |
| Осведомлен о Redux | Нет | Да |
| Для считывания данных | Читает данные из props | Подписан на Redux state (состояние) |
| Для изменения данных | Вызывает callback из props | Отправляет (dispatch) Redux действие (actions) |
| Пишутся | Вручную | Обычно, генерируются Redux |
Магия таблиц обычно проявляется не сразу. Если переписать наше приложение, а потом взглянуть сюда еще раз - многое станет гораздо яснее. Предлагаю так и поступить. Поехали!
Установим prop-types и создадим компоненты.
1 | |
src/components/User.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
src/components/Page.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Наш файл App.js - это контейнер (так как подключен к redux). Изменим-с...
src/containers/App.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
Не забудьте так же перенести App.css в src/containers и поменять подключение <App /> в index.js:
1 | |
Так же удалите файл с тестом - App.test.js, так как тесты в данный момент не входят в нашу программу, но возможно, будут добавлены в конце в раздел рецептов.
Итого: изучили на практике деление на компоненты и контейнеры.