首页 > 解决方案 > vue和react中的功能相同,但在react中不起作用

问题描述

我在 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);
  }
},

},

反应不起作用:

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

获取用户Vue:

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

  console.log(response);
},

getUsers 反应:

  componentDidMount() {
    this.getUsers()
  }

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

    console.log(response);
  };

标签: javascriptreactjsvue.js

解决方案


在 jsthis中,普通函数和箭头函数的行为不同。而且严格模式和非严格模式也有区别。

特别是,箭头函数不绑定到调用者的上下文。如果您使用的函数/库实际上取决于此行为,则会产生一些非常晦涩的错误。

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

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

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


推荐阅读