在JavaScript/jQuery中管理用户列表的最佳方法是什么
What is the best method to manage a user list in JavaScript/jQuery?
我正在使用socket.io构建聊天室应用程序,但我在理解保持聊天室用户列表更新的正确和最简单的方法方面遇到了问题。
当客户端加入聊天室时,它会发送用户列表,并使用以下代码更新用户列表面板:
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。只需要指向正确的方向真的。。。
解决此问题的最简单方法是在列表发生更改时重新渲染列表。然而,对于大型列表,这可能效率低下,并且您可以通过简单地向每个元素添加一个ID,然后使用它更新或删除它们来节省大量时间
使用jQuery,这个过程可能会变得有点复杂,因为您将在DOM中管理模型,而不是在代码中管理模型。但这绝对是可能的。
另一种方法是查看像React这样的库。
React要求您描述您的界面。然后,每当您更改模型时,它将负责重新渲染它。额外的好处是,它检查DOM的最后一个状态,并且只对已更改的位应用更新。
var UserList = React.createClass({
getInitialState: function() {
users: []
},
componentDidMount: function() {
// set up socket listeners
// every time you want to update the user list
this.setState({ users: updatedVersionOfUsers });
},
render: function() {
var users = this.state.users;
// describe what this component should look like
return (
<ul>
{users.map(function(user) {
return (
<li className='list-group-item'>{user}</li>
);
}}
</ul>
);
}
})
现在,您所要考虑的就是确保模型(this.state.users
)是最新的。只要你用this.setState
更新它,React就会完成剩下的工作
您甚至可以将React与jQuery一起使用。只需找到您希望这个React组件位于其中的元素,并在那里进行渲染。
React.render(
<UserList />,
$('#someElement')[0]
);
Ryan Florence有一篇关于将React集成到现有项目中的精彩演讲,而不是全部重写。
- Polymer 1.0:管理简单项目列表的最佳实践
- 将选项添加到插件msDropdown生成的下拉列表的最佳方式是什么
- 使用bottle将列表从python传递到js的最佳方式是什么
- 提交后从选择下拉列表中自动选择选项的最佳方法
- 从 Dojo 中的对象列表创建表的最佳方法
- 根据 jquery 中 2 个选择列表的选定值动态计算的最佳方法
- 什么是应用于帖子列表的最佳 Jquery 轮播插件
- 计算日期窗体下拉列表的月天数的最佳方法
- 在 jquery 中动态创建元素列表的最佳实践
- 对两个下拉列表交替约束的最佳方法
- 如何将一个元素列表移动到另一个性能最佳的元素中
- 在JQuery / Javascript中加载从JSON列表返回的URL的最佳方法是什么
- 在html 4中使用CSS或javascript折叠和扩展列表的最佳方式是什么
- JQueryUI:创建两个拖放列表的最佳方式,其中一个是可排序的,另一个在拖放时重新排序
- 用值列表填充文本框的最佳方法是使用java脚本或jquery双击
- 在asp.net-mvc网站中,存储列表客户端以切换下拉选择选项的最佳方式是什么
- 筛选只能通过ASP.NET MVC中的javascript进行筛选的数据库记录列表的最佳方法是什么
- 在Sammy.js模板中呈现嵌套对象列表的最佳方式
- jQuery-用列表数据填充隐藏字段的最佳方式
- 在JavaScript/jQuery中管理用户列表的最佳方法是什么