Это руководство было написано в сотрудничестве с замечательным Кристианом Нвамба.

Когда вы учитесь программировать, в вашем распоряжении множество ресурсов - книги, скринкасты, учебные пособия и даже упражнения. Но чтобы стать отличным разработчиком, вам нужно практиковать то, чему вы научились, в проекте.

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

Вы будете строить проект поэтапно, и, чтобы проверить, понимаете ли вы его, в конце мы добавили несколько специальных бонусных заданий. Готовы к тесту?

Вот что мы построим:

Довольно круто, правда 😏?

Следуя инструкциям, вы узнаете, как создать чат в реальном времени, список тех, кто в сети, а в процессе вы узнаете, как структурировать приложение React. Чтобы обеспечить работу нашего чата, мы будем использовать сервис, который я помогаю создать, под названием Chatkit.

Звучит неплохо? Настройтесь на FreeCodeCamp radio и слушайте плавную, нежную фоновую музыку, чтобы не терять концентрацию, и вперед!

Что тебе нужно знать

Собственно еще кое-что 👀:

Было бы неплохо, если бы вы уже знали базовый JavaScript, Node и React. При этом, если вы не чувствуете себя комфортно с этими технологиями, все равно попробуйте!

Мы намеренно структурировали это руководство, чтобы было ясно, куда вставлять код, чтобы вы могли следить за ним. Если у вас есть вопросы, задавайте их здесь!

Хорошо, шаг первый:

Настроить Электрон

Для создания кроссплатформенного настольного приложения с использованием веб-технологий мы будем использовать Электрон.

Чтобы начать работу, мы сделали минимальный стартовый шаблон. Загрузить:

git clone https://github.com/pusher/electron-desktop-starter-template electron-desktop-chat
cd electron-desktop-chat

И установите эти локальные зависимости:

npm install

Создать учетную запись Chatkit

В этом руководстве нас не слишком заботит создание серверной части, поэтому мы будем использовать Chatkit.

Чтобы продолжить, создайте бесплатную учетную запись и новый экземпляр под названием Электронный чат на рабочем столе:

В окне настроек включите провайдер тестовых токенов:

Обратите внимание на конечную точку поставщика тестовых токенов, указатель экземпляров и секретный ключ. Они нам понадобятся на следующем этапе.

Настройте сервер Node

Chatkit имеет два основных понятия: Пользователи и комнаты.

Пользователи могут создавать комнаты, присоединяться к ним и общаться в них. Но прежде чем пользователь сможет взаимодействовать с комнатой, нам нужно ее создать.

Это должно происходить на сервере.

В электронно-настольном чате запустите:

npm install --save express cors body-parser pusher-chatkit-server

И вставьте это в новый файл с именем server.js:

Не забудьте заменить instanceLocator и key своими собственными Instance Locator и Key.

Большая часть этого кода является шаблоном, импортирующим зависимости, настройкой Express и т. Д.

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

Запустите сервер с node server.js, и вы увидите, что сервер «работает на порту 3001».

Создайте форму имени пользователя

Когда кто-то загружает наше приложение, мы хотим попросить у них имя пользователя, а затем отправить его «/ users».

Установите несколько нативных компонентов пользовательского интерфейса с помощью:

npm install --save react-desktop

И создайте компонент формы под названием UsernameForm:

Подробнее о компонентах формы React вы можете прочитать здесь. Случайно в документации используется класс NameForm, похожий на наш, так что все должно быть вам знакомо!

Затем замените все приложение на:

И чтобы проверить это, запустите npm run dev. Вы увидите, что форма имени пользователя отображается:

Убедитесь, что сервер запущен (помните, что это команда `node server.js), нажмите Отправить, и вы увидите, что пользователь создан:

Переходные экраны без библиотеки

Когда у нас есть пользователь, мы можем перевести его из формы имени пользователя в фактический экран чата. Мы должны определить это сейчас.

Создайте новый компонент под названием Chat:

И обновите приложение:

Запустите приложение, введите имя пользователя, и вы перейдете к экрану чата:

Добавить чат в реальном времени с Chatkit

Вещи действительно идут, не так ли?

Для подключения к Chatkit из клиента необходимо установить @ pusher / chatkit:

npm install --save add @pusher/chatkit

И замените весь чат на:

Не забудьте заменить значения tokenProviderUrl и instanceLocator на конечную точку поставщика тестовых токенов и указатель экземпляра.

Запустите приложение, нажмите ⌘ + ⌥ + I (Control + Shift + I), и вы увидите, что вы подключились к Chatkit.

Создать чаткит-комнату

У нас есть пользователь, но теперь нам нужна комната!

Чтобы создать его, используйте инспектор Chatkit:

Не забудьте скопировать идентификатор своей комнаты, он понадобится нам на следующем шаге.

Создайте компонент чат-комнаты

Теперь у нас есть комната, и мы можем подписаться на новые сообщения, отправляемые в этой комнате.

Чтобы отобразить их, создайте компонент MessageList:

И обновите чат:

Как всегда, не забудьте обновить roomId, указав фактический идентификатор комнаты.

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

Через секунду мы позволим пользователям отправлять свои собственные сообщения. А пока для тестирования подписки воспользуйтесь инспектором:

Отправка сообщений

Чтобы пользователи могли отправлять собственные сообщения, создайте компонент SendMessageForm:

И обновите чат:

Перезагрузите приложение с помощью ⌘ + R (Control + Shift + R), и вы сможете отправлять сообщения:

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

Какое время быть живым ...

Стиль пользовательского интерфейса

Благодаря React Desktop наше приложение уже выглядит прилично, но мы можем улучшить его.

Давайте внесем несколько изменений и определим наш макет для использования на следующем и последнем шаге.

Замените весь index.css на:

Покажи, кто в сети

Чтобы завершить работу над нашим приложением чата, мы добавим список «кто в сети», чтобы показать, как вы догадались, кто в сети!

Создайте компонент OnlineList:

Затем обновите чат:

Вы ожидали, что это будет сложнее? Я точно так и сделал с первого раза!

Поскольку Chatkit динамически обновляет свойство users, нам не нужно управлять каким-либо собственным состоянием. Нам просто нужно сказать React, что нужно выполнить повторный рендеринг и, в свою очередь, повторно оценивать users каждый раз, когда кто-то подключается к сети (onUserCameOnline), переходит в автономный режим (onUserWentOffline) или присоединяется к комнате (onUserJoined).

Идите вперед, запустите сервер и клиент и полюбуйтесь своим великолепным новым приложением для чата:

Если вы зашли так далеко, можете продолжать! Попробуйте выполнить эти бонусные испытания…

Задача 1. Покажите, кто в комнате активно печатает.

Посмотрите, сможете ли вы добавить в приложение индикаторы набора текста. Например, если я печатаю, вы и все остальные в комнате увидите «Букер печатает…».

Если бы мы с Крисом оба печатали, вы бы увидели: «Букер и Крис печатают…» и так далее.

Подсказки:

Задача 2: разрешить пользователю создать свою собственную комнату

В этом уроке мы использовали инспектора для создания комнаты, а затем жестко запрограммировали идентификатор комнаты. Это не лучшая практика.

В большинстве приложений вам нужно динамически создавать комнаты с помощью функции createRoom.

Когда кто-то загружает приложение, попросите у них также название комнаты:

Если комната существует, присоединяйтесь к ней; если нет, создайте его, а затем присоединитесь к нему.

Подсказки:

Заключение

Это было весело! Мы создали довольно крутое приложение для чата меньше чем за час?

Одна вещь, которую я заметил (и, возможно, вы тоже), заключается в том, что после создания основы (шаблон, соединение Chatkit и т. Д.) Добавлять новые функции чата довольно просто.

Помимо проблем, нам было бы любопытно посмотреть, где еще вы могли бы подать заявку. Некоторые идеи:

  • Отправить файлы
  • Количество непрочитанных сообщений
  • Уведомления
  • Читать курсоры
  • Индивидуальный обмен сообщениями

Не стесняйтесь подписываться на нас в Twitter, @bookercodes и @codebeast.

До следующего раза, чао.