我在尝试更新现有的React select(下拉列表)以包含当前在服务器上的所有用户。我有一个服务器上所有用户的数组,我只是无法让我的下拉列表更新数组。如何动态创建ReactJs下拉菜单的选项?
这里是我的代码:
class UserList extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
socket.emit('join', {room: this.state.value});
this.setState({value: event.target.value});
alert('People on server: ' + this.state.value);
event.preventDefault();
}
handleSubmit(event) {
//not really using this
event.preventDefault();
}
render() {
return (
<form onChange={this.handleChange}>
<label>
Pick your favorite La Croix flavor:
<select id="userlist" value={this.state.value} onChange={this.handleChange}>
{this.props.list.map((name) => <option>{name}</option>)}
</select>
</label>
</form>
);
}
}
class Login extends React.Component {
render() {
return (
<div className="login">
<NameForm />
<UserList list={users} />
<Chat />
<ChatInput />
</div>
);
}
}
我很新的反应,我不明白如何让元素通过外部请求更新(在这种情况下,服务器)。现在,我的JavaScript将服务器上的人员列表存储在由服务器更新的名为“users”的数组中。我希望下拉列表可以在数组进行更新时更新。
编辑:
这里是填充用户数组的代码:
socket.on('update_list', function(msg) {
users.push(msg.data);
});
的用户阵列的服务器调用 'update_list' 后肯定是更新。在用户被调用之后,我已经打印了这些值,并且当新用户登录时,用户会相应地进行更新。
所以,你将用户数组传递给UserList。你可以发布填充'users'数组的代码吗?听起来就像你对它使用'setState'不正确。 –
我编辑了我的原始文章,以显示填充'users'数组的javascript的一点点。我遗漏了我声明'用户'的地方,但它对react元素和套接字函数都是全局访问的。你能否详细说明使用'setState'。我不确定如何正确使用它。 – monker