重定向在Accounts.createUser()中不起作用

时间:2019-02-19 12:44:45

标签: reactjs redirect meteor router react-router-dom

我在meteorJS中使用了react-router-dom。创建帐户后,我尝试重定向。现在,帐户已成功创建,但重定向不起作用。

我也尝试在成功创建帐户时设置setState。它也不起作用。

   handleSubmit(event) {
        event.preventDefault();
        Accounts.createUser(
            {
                username: this.state.mobile,
                password: "123"
            },
            function(err) {
                if (err) {
                    console.log("err", err);
                } else {
                    console.log("account created");
                    this.setState({
                        redirect: true
                    });
                    return <Redirect to="/" />;
                }
            }
        );
    }

此消息显示在控制台中

Exception in delivering result of invoking 'createUser': TypeError: this.setState is not a function

2 个答案:

答案 0 :(得分:0)

您需要将回调绑定到当前上下文,可以使用箭头功能来实现。

此外,回调函数中的return语句不会执行您认为正在做的事情,该值会丢失,您应该使用历史记录对象推送新路由

handleSubmit(event) {
  event.preventDefault();
  Accounts.createUser(
  {
    username: this.state.mobile,
    password: "123"
  },
  err => { // here use the arrow function to bind to the current "this"
    if (err) {
      console.log("err", err);
    } else {
      console.log("account created");
      this.setState({
        redirect: true
      });
      hashHistory.push("/"); // push the next route
    }
  });
}

答案 1 :(得分:0)

您丢失了上下文

  handleSubmit(event) {
    event.preventDefault();
    let that = this;
    Accounts.createUser(
        {
            username: this.state.mobile,
            password: "123"
        },
        function(err) {
            if (err) {
                console.log("err", err);
            } else {
                console.log("account created");
                that.setState({
                    redirect: true
                });
                return <Redirect to="/" />;
            }
        }
    );
}