Size: a a a

React: русскоязычное сообщество

2021 January 28

AB

Azat Belgibayev in React: русскоязычное сообщество
Roma Prokopets
мне нужен просто синтаксис, как правильно это написать и всеееее
Я тебя понял, копай сам)
источник

IS

Ivan Sequend 👾 in React: русскоязычное сообщество
Всем привет! Работаю над чатом, где на вебсокетах реализован функционал типа Фетч последних сообщений (обычно это рест-апи запрос с массивом в ответе).

Следовательно последние сообщения приходят и рендерятся по одному, такая вот апиха.

В редьюсере обновляю состояние чата и добавляю сообщения фильтром по timestamp (чтобы не перерисовывать каждый раз все сообщения разом), когда соединение ws по какой-либо причине падает и при передподключении приходят те же сообщения. (Такая вот апиха 😀)

Вопрос: существует ли какой бэст вей работы с состоянием, кроме как фильтр в моем случае, чтобы добавлять только новые сообщения ?
источник

IS

Ivan Sequend 👾 in React: русскоязычное сообщество
Пример:

Сообщения:

1
2
3

-соединение оборвалось
Подключились заново-

1
2
3
1
2
3
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
Ivan Sequend 👾
Всем привет! Работаю над чатом, где на вебсокетах реализован функционал типа Фетч последних сообщений (обычно это рест-апи запрос с массивом в ответе).

Следовательно последние сообщения приходят и рендерятся по одному, такая вот апиха.

В редьюсере обновляю состояние чата и добавляю сообщения фильтром по timestamp (чтобы не перерисовывать каждый раз все сообщения разом), когда соединение ws по какой-либо причине падает и при передподключении приходят те же сообщения. (Такая вот апиха 😀)

Вопрос: существует ли какой бэст вей работы с состоянием, кроме как фильтр в моем случае, чтобы добавлять только новые сообщения ?
Когда приходит новое сообщение нужно при вставке проверять что его ещё нет.
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
А вообще должен быть реализован курсор и приходить только новые сообщения.
источник

IS

Ivan Sequend 👾 in React: русскоязычное сообщество
Юра Чеботаев
Когда приходит новое сообщение нужно при вставке проверять что его ещё нет.
Так и делаю
источник

IS

Ivan Sequend 👾 in React: русскоязычное сообщество
Но решение выглядит костыльным
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
Потому что курсора нет
источник

IS

Ivan Sequend 👾 in React: русскоязычное сообщество
Юра Чеботаев
А вообще должен быть реализован курсор и приходить только новые сообщения.
Вот тут не совсем понял..

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

Какие последние сообщения ты имеешь ввиду?
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
А, по вебсокету
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
Тогда не надо просто отравлять последние сообщения
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
Ещё можно при коннекте на вебсокет отравлять время с которой нужно получить сообщения. Это время - время обрыва соединения.
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
Тогда придут только новые сообщения и правильно вставятся
источник

IS

Ivan Sequend 👾 in React: русскоязычное сообщество
Юра Чеботаев
Ещё можно при коннекте на вебсокет отравлять время с которой нужно получить сообщения. Это время - время обрыва соединения.
Ну примерно тот же эффект  на клиенте и запилил))
источник

ЮЧ

Юра Чеботаев... in React: русскоязычное сообщество
👍
источник
2021 January 29

R

Roman in React: русскоязычное сообщество
проблема такова
1. октрытая страница isOnline=true
2. перезагружаем страницу
3. isOnline=false
4. страница перезагрузилась
5. isOnline=true
6. фронт дергает graphql запрос currentUser и isOnline=false, а должно быть тру
источник

A

Aleksandr in React: русскоязычное сообщество
что то не так приходит или что то не то с кодом
источник

R

Roman in React: русскоязычное сообщество
Aleksandr
что то не так приходит или что то не то с кодом
Код

async function processConnection(container, user, ws) {
   const mutex = container.resolve('mutex')
   const { id: sessId } = await container.resolve('wsSessionParser').parse(ws);

   await mutex.lock();
   await updateUserStatus(user.id, sessId, true, container)
   mutex.release();

   ws.on('close', async () => {
       await mutex.lock();
       await updateUserStatus(user.id, sessId, false, container)
       ws.close()
       mutex.release();
   });
}
источник

R

Roman in React: русскоязычное сообщество
Подписка отрабатывает после апдейта

updateUser => notifyAboutChangedStatus
источник

R

Roman in React: русскоязычное сообщество
считываются тут
   const { data, loading, refetch, error } = useQuery(TEAM_MEMBERS, { variables: { teamId } });

а дальше передается в другую компоненту                         members={data.teamMembers}

потом в цикле перебираются юзера и выводится
                               active={member.user.isOnline}
которое фолс
источник