在 vue 和 react 中具有相同的功能,但在 react 中不起作用

IT技术 javascript reactjs vue.js
2021-05-18 03:40:54

我在 React/Vue 中执行相同的登录功能。它在 VueJS 上运行良好,但是当我在 ReactJS 中使用时它不起作用。

Vue 工作正常:

async EnvioLogin() {
  try {
    const response = await axios.post("api/auth/login", {
      email: this.email,
      password: this.password,
    });
    localStorage.setItem("token", response.data.token);
    if (response.status == "200") {
      this.getUsers();
      console.log(response);
      this.$router.push("intermediorotas");
      this.showLogin = false;
    }
  } catch (error) {
    this.showError = true;
    setTimeout(() => {
      this.showError = false;
    }, 2000);
  }
},

},

react不起作用:

    EnvioLogin = async () => {
        try {
          const response = await axios.post("api/auth/login", { email: this.state.email, password: this.state.password });
          localStorage.setItem("token", response.data.token);
          if (response.status === "200") {
            this.getUsers();
            console.log(response);
            this.props.history.push("/app");
          }
        } catch (error) {
          this.setState({ error: "User or Password wrong!" });
          setTimeout(() => {
            this.setState({ error: "" });
          }, 2000);
        }
      };

我在 try{} 中都使用了 console.log 并且两个变量(电子邮件/密码)在这两种情况下都到达那里,并且在浏览器中没有出现错误。我认为问题出在

    const response = await axios.post("api/auth/login", { email: this.state.email, password: this.state.password });
      localStorage.setItem("token", response.data.token);

获取用户视图:

  methods: {
    async getUsers() {
      const response = await axios.get("api/alunos", {
        headers: {
          Authorization: "Bearer " + localStorage.getItem("token"),
        },
      });

  console.log(response);
},

getUsers react:

  componentDidMount() {
    this.getUsers()
  }

  getUsers = async () => {
    const response = await axios.get("api/alunos", {
      headers: {
        Authorization: "Bearer " + localStorage.getItem("token"),
      },
    });

    console.log(response);
  };
1个回答

在 js 中,this在普通函数和箭头函数中表现不同。严格模式和非严格模式也有区别。

特别是,箭头函数不绑定到调用者的上下文。如果你的函数/你使用的库实际上依赖于这种行为,它会产生一些非常模糊的错误。

您的 2 个函数的定义不同。第一个是普通函数,第二个是箭头函数。他们也参考了这一点。

您可以检查thisfirst的用法但是如果没有更多的上下文/可重现的代码,就很难理解这个问题。

参见:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this