{"id":19605255,"url":"https://github.com/macket/geekbrains_react","last_synced_at":"2025-04-27T19:32:48.246Z","repository":{"id":36433725,"uuid":"223228949","full_name":"Macket/geekbrains_react","owner":"Macket","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-07T12:13:33.000Z","size":852,"stargazers_count":1,"open_issues_count":23,"forks_count":6,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-05T02:33:34.545Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Macket.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-21T17:33:27.000Z","updated_at":"2020-10-07T22:35:16.000Z","dependencies_parsed_at":"2023-01-17T01:26:17.369Z","dependency_job_id":null,"html_url":"https://github.com/Macket/geekbrains_react","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Macket%2Fgeekbrains_react","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Macket%2Fgeekbrains_react/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Macket%2Fgeekbrains_react/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Macket%2Fgeekbrains_react/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Macket","download_url":"https://codeload.github.com/Macket/geekbrains_react/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251196192,"owners_count":21550918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T09:42:05.400Z","updated_at":"2025-04-27T19:32:47.928Z","avatar_url":"https://github.com/Macket.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Geekbrains React\n\n## Оглавление\n\n- [Урок 1. Настройка среды разработки и первое React-приложение](#Урок-1)\n- [Урок 2. Жизненный цикл React-компонента](#Урок-2)\n- [Урок 3. Продолжаем погружение в React и подключаем UI-библиотеку](#Урок-3)\n- [Урок 4. Роутинг в React: разбиваем мессенджер на чаты](#Урок-4)\n- [Урок 5. Redux. Управление состоянием приложения](#Урок-5)\n- [Урок 6. Redux middlewares, подключение роутера к Redux и хранение данных с помощью Redux-persist](#Урок-6)\n- [Урок 7. Работа с API](#Урок-7)\n- [Урок 8. Progressive Web App](#Урок-8)\n\n## Урок 1\n### Настройка среды разработки и первое React-приложение\n\n- Создан проект\n- Настроены package.json и webpack.config\n- Установлен webpack-dev-server\n- Создано простейшее React-приложение с использованием функциональных компонентов\n\n## Урок 2\n### Жизненный цикл React-компонента\n\n- Разобран жизненный цикл компонентов на примере App и Child\n- Созданы компоненты MessageField и Message\n- Реализована отправка сообщений по нажатию кнопки\n- Реализован ответ от робота\n\n## Урок 3\n### Продолжаем погружение в React и подключаем UI-библиотеку\n\n- Подключён Material-UI\n- Сделана первичная вёрстка, явно выделено поле для сообщений\n- Визуально разделены сообщения от пользователя и ответы робота\n- Добавлена возможность ввода текста сообщения и его отправки\n\n\n## Урок 4\n### Роутинг в React: разбиваем мессенджер на чаты\n\n- Подключён BrowserRouter\n- Создать верхний компонент Router\n- Приложение разбито на чаты с помощью роутера (URLs: /chat/\u003cchat_id\u003e/)\n- Реализовано хранение сообщений в словаре с id в качестве ключа\n- Реализовано хранение чатов в словаре (chatId: {title: название, messageList: массив из id сообщений})\n\n## Урок 5\n### Redux. Управление состоянием приложения\n\n- Подключён Redux\n- Подключено расширение Redux DevTools\n- Созданы action-ы отправки сообщения и добавления чата\n- Чаты перенесены в Redux\n\n## Урок 6\n### Redux middlewares, подключение роутера к Redux и хранение данных с помощью Redux-persist\n\n- Подключены middlewares\n- Логика ответа от робота перенесена в middleware\n- Router подключён к Redux\n- Переходы между чатами реализованы при помощи функции push()\n- Подключён redux-persist\n- Реализовано сохранение сообщений и чатов с помощью redux-persist\n\n## Урок 7\n### Работа с API\n\n- Подключён redux-api-middleware\n- Организована загрузка чатов и сообщений через API\n- Реализовано выделение сущностей (чатов и сообщений) с помощью normalizr\n\n## Урок 8\n### Progressive Web App\n\n- Подключён service-worker\n- Добавлен Web App Manifest и иконки\n- Реализовано всплывающее окно для iPhone с предложением установить приложение на домашний экран\n- Добавлен скрипт отслеживания установок\n- Реализована подписка на push-уведомления\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmacket%2Fgeekbrains_react","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmacket%2Fgeekbrains_react","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmacket%2Fgeekbrains_react/lists"}