[未处理的承诺拒绝:ReferenceError:电子邮件未定义]

时间:2021-03-03 19:52:37

标签: javascript react-native expo

[未处理的承诺拒绝:ReferenceError:电子邮件未定义]

  • AuthProvider 中的上下文\auth.js:28:17
  • node_modules\regenerator-runtime\runtime.js:63:39 在 tryCatch 中
  • node_modules\regenerator-runtime\runtime.js:293:21 invoke
  • ... 8 个来自框架内部的堆栈帧

当我尝试登录时出现此错误,请帮帮我

上下文身份验证:

  import React, {
   useState,
   useEffect,
   createContext,
   useContext,
   useCallback,
 } from "react";

import AsyncStorage from "@react-native-async-storage/async-storage";

import api from "../services/api";

const AuthContext = createContext({ signed: false, user: {} });

const AuthProvider = ({ children }) => {
 const [user, setUser] = useState({});
 const [loading, setLoading] = useState(true);

useEffect(() => {
async function loadStorageData() {
  const storageUser = await AsyncStorage.getItem("@MBAuth:user");
  const storageToken = await AsyncStorage.getItem("@MBAuth:token");

  if (storageUser && storageToken) {
    setUser(JSON.parse(storageUser));
    setLoading(false);
  } else if (!storageUser && !storageToken) {
    setLoading(false);
  }
}
loadStorageData();
}, []);

const signIn = useCallback(async ({ email, password }) => {
 const response = await api.post("/sessions", {
  email,
  password,
});

const { token, user } = response.data;
console.log(response);

await AsyncStorage.multiSet([
  ["@MBAuth:token", token],
  ["@MBAuth:user", JSON.stringify(user)],
]);

setUser({ token, user });
}, []);

const signOut = useCallback(async () => {
await AsyncStorage.multiRemove(["@MBAuth:user", "@MBAuth:token"]);

setUser({});
}, []);

return (
  <AuthContext.Provider
    value={{ signed: !!user, user, signIn, signOut, loading }}
  >
    {children}
 </AuthContext.Provider>
);
};

function useAuth() {
 const context = useContext(AuthContext);

 if (!context) {
  throw new Error("useAuth must be used within an AuthProvider");
 }

 return context;
}

export { AuthProvider, useAuth };

登录:

const handleSignIn = useCallback(
  async (data) => {
    try {
      await signIn({
        email: data.email,
        password: data.password,
     });
    } catch (err) {
      console.log(err);
   }
 },
 [signIn]

);

0 个答案:

没有答案