如何从卸载组件停止回调

时间:2017-05-25 04:26:53

标签: reactjs meteor

这里真的很困惑。我更新到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 }});
        }
      });
    });
  }

1 个答案:

答案 0 :(得分:2)

Accounts.createUser生成的HTTP请求返回错误时,handleSubmit绑定的组件将被卸载,这就是调用setState生成错误的原因。

一种选择是将handleSubmit移至未在表单提交时卸载的父级,并将该功能作为道具传递下去。另一种选择是使用redux或flux进行状态管理。

另一种选择是在Accounts.createUser成功返回之前保持组件安装,这样可以在出现错误时在表单上显示消息。例如,您可以指出哪些字段无效。