Перевести чат на рельсы React. Ниже поэтапное описание процесса для тех, кто еще не до конца освоился и не знает что для чего использовать в процессе решения задачи.
Создать 4 компонента:
Композитный компонент истории чата, который использует ChatMessage
для отображения каждого сообщения (передав объект сообщения в props
каждого ChatMessage
). Используйте массив для сообщений (например через map
)
Одно сообщение чата. Из Chat
в props
надо передать объект сообщения что бы его отрисовать в этом компоненте.
Просто компонент для отображения полей ввода nick, message и кнопки отправки. Используйте ref для сохранения ссылок на объекты полей ввода в объекте компонента.
Select
для чат-комнат.
render
должен это понимать по state
или props
и выдавать разное отображение
компонента.componentWillMount
. Тут вы можете считать чатрумы или инициировать setInterval
для опроса истории сообщений.then
промиса запроса к серверу, должны вызывать setState
для обновления представления.ref
ссылки на поля вводаlet chatRoomId = 1
.fetch
из старой версии.и это почти всё, но в идеале:
fetch
ставим поля ввода disabled
<select>
componentWillMount
делаем fetch
за чатрумами.then
делаем setState
с массивом объектов ChatRoom
render
пишем loading...render
учитываем state
и вставляем массив с <option value={room.id}>{room.title}</option>
в <select>
onChange
сохраняем в глобальную переменную chatRoomId
id текущего чатрума.componentWillMount
делаем setInterval
setInterval
делаем fetch
из текущего ChatRoom (chatRoomId
)then
отправляем полученные данные в setState
render
берем массив сообщений из this.state
и формируем массив компонентов <ChatMessage msg={msg} />
. Можно for
перед return
, можно map
в JSX.messageId
можно использовать глобальную переменную.