reactjs - 如何停止卸载组件的回调

标签 reactjs meteor

这里真的很困惑。我更新到了 React Router 4,这需要一些更改,现在当我的注册表单在服务器端出现错误时,它会返回控制台错误: 这是回调。

setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the RegisterForm component.

真正令人困惑的是,如果我在我不知道的 Accounts.createUser 函数之外运行 this.setState({ error: {createUserError: "Test error"}});没有收到控制台错误。

有什么建议吗???

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 }});
        }
      });
    });
  }

最佳答案

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

一种选择是将 handleSubmit 移动到在表单提交时不会卸载的父级,并将该函数作为 prop 向下传递。另一种选择是使用 redux 或 Flux 进行状态管理。

另一个选项是保持组件的安装状态,直到 Accounts.createUser 成功返回,这将允许您在出现错误时在表单上显示消息。例如,您可以指示哪些字段无效。

关于reactjs - 如何停止卸载组件的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44172258/

相关文章:

javascript - 为什么我的 React 开关在此模式下不起作用?

javascript - 通过 SSH 连接的 Nodejs Numtel Mysql

javascript - 如何在laravel之类的vue js中使用组路由?

reactjs - 在react-native中隐藏键盘

node.js - 使用 Angular-Meteor 运行预定作业的最理想方式

docker - 错误 : Cannot find module "fibers/future" in docker container

mongodb - 从 Meteor 集合中获取随机文档

javascript - 如何在 React.js 中调整 Chart.JS 元素的大小?

css - JSX : render grid of images

javascript - API 获取失败,请求的资源上不存在 'Access-Control-Allow-Origin' header