Я создаю приложение для чата с помощью socket.io, но у меня возникла проблема с пониманием правильного и простейшего метода для обновления списка пользователей чата.Каков наилучший способ управления списком пользователей в JavaScript/jQuery?
В тот момент, когда клиент присоединяется к чат он отправляется список пользователей и обновляет панель списка пользователей, используя следующий код:
socket.on('names', function(channel,nicks){
for (var nick in nicks) {
$('#users').append('<li class="list-group-item" id="' + nick + '">' + nick + '</li>');
}
});
, но на данный момент он не учитывает, когда другой пользователь присоединяется или уходит после этой точки, поэтому список пользователей одинаковый в течение всей продолжительности с момента присоединения клиента.
Эти события вызываются, когда другой пользователь присоединяется или покидает:
socket.on('join', function(channel,nick){
// need to add the user to the user list, sort the user list
// alphabetically and then update the list group html
});
socket.on('part', function(channel,nick){
// need to delete the user from the user list, sort the user list
// alphabetically and then update the list group html
});
socket.on('quit', function(nick){
// need to delete the user from the user list, sort the user list
// alphabetically and then update the list group html
});
Что я должен искать на то, чтобы сделать то, что мне нужно здесь?
Я предполагаю, что вместо того, чтобы ретранслировать ответ сервера и строить из него HTML, я должен сохранить массив пользовательских списков на стороне клиента, обновленный на основе ответов сервера, а затем перестроить HTML из этого , Просто нужна точка в правильном направлении ...
Благодарим вас за подробный ответ, я был в отъезде, поэтому не заметил этого до сих пор. Я понимаю (я думаю) об использовании React, но я не понимаю в вашем примере '// настройку сокетов-слушателей' и« Теперь все, о чем вы должны думать, это убедиться, что модель ('this.state.users ') обновляется. Пока вы обновляете его с помощью' this.setState', тогда React сделает все остальное. " Не могли бы вы привести пример того, как я интегрирую это в текущий код (я помещал события сокета в существующий вопрос). Простой пример будет выполнен, и я выработаю все остальное. Спасибо. – Jack