【发布时间】:2016-12-23 07:08:50
【问题描述】:
我正在尝试更新现有的 React 选择(下拉菜单)以包含当前在服务器上的所有用户。我在服务器上有一个包含所有用户的数组,当数组更新时,我无法让我的下拉列表更新。
这是我的代码:
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>
);
}
}
我对 React 很陌生,我不明白如何通过外部请求(在本例中为服务器)获取要更新的元素。现在,我的 javascript 将服务器上的人员列表存储在一个名为“用户”的数组中,该数组由服务器更新。我希望下拉列表在数组更新时更新。
编辑:
这是填充用户数组的代码:
socket.on('update_list', function(msg) {
users.push(msg.data);
});
用户数组在服务器调用'update_list'后肯定会更新。我在调用之后打印了 users 中的值,当新用户登录时,用户会相应地更新。
【问题讨论】:
-
因此,您将
users数组传递到 UserList 中。您可以发布填充users数组的代码吗?听起来你在上面错误地使用了setState。 -
我编辑了我的原始帖子以显示填充
users数组的一点点javascript。我遗漏了声明users的位置,但是 react 元素和套接字函数都可以全局访问它。您能否详细说明使用setState。我不确定如何正确使用它。
标签: javascript reactjs flask