这里真的很困惑。我更新到React Router 4,需要进行一些更改,现在当我的注册表单在服务器端出错时,它会返回控制台错误: 这是回调。
setState(...):只能更新已安装或安装的组件。这个 通常意味着您在未安装的组件上调用了setState()。这是 无操作。请检查RegisterForm组件的代码。
如果我在this.setState({ errors: {createUserError: "Test error" }});
函数之外运行Accounts.createUser
,那么真正令人困惑的是我没有得到consolde错误。
任何建议????
handleSubmit(event) {
event.preventDefault();
this.setState({errors: {} }, function() {
var data = {
email: this.state.email,
password: this.state.password
};
Accounts.createUser(data, (error) => { // This arrow function preserves this
if(error) {
this.setState({ errors: {createUserError: error.reason }});
}
});
});
}
答案 0 :(得分:2)
当Accounts.createUser
生成的HTTP请求返回错误时,handleSubmit
绑定的组件将被卸载,这就是调用setState
生成错误的原因。
一种选择是将handleSubmit
移至未在表单提交时卸载的父级,并将该功能作为道具传递下去。另一种选择是使用redux或flux进行状态管理。
另一种选择是在Accounts.createUser
成功返回之前保持组件安装,这样可以在出现错误时在表单上显示消息。例如,您可以指出哪些字段无效。