反应钩子useContext:未捕获(承诺)TypeError:setUser不是函数

时间:2020-07-17 18:40:35

标签: reactjs authentication react-hooks use-context

嘿,我目前正在尝试使用钩子和useContext进行身份验证

我在此文件中定义了useContext:

import { createContext } from "react";

export const UserContext = createContext(null);

在我的路由器文件中,我通过以下方式设置了useContext:

export default function Router() {
  const [user, setUser] = useState(null);
  const value = useMemo(() => ({ user, setUser }), [user, setUser]);

  return (
    <Switch>
      <UserContext.Provider value={value}>
        <Route path="/login" component={Login} />
      ...
      </UserContext.Provider>
    </Switch>
  );
}

现在在我的登录功能中,我的handleSubmit中存在一个问题,该问题由我的表单触发(我的后端调用和获取都很好用):

export default function Login() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const { user, setUser } = useContext(UserContext);

  const handleSubmit = async (event) => {
    event.preventDefault();
    const obj = {
      Email: email,
      Password: password,
    };

    loginSession(obj);
    const session = await getUserData();
    setUser(session);
  };

const session = ...中,我得到了我的帐户数据 当我setUser(session)

我收到以下错误: login.js:25 Uncaught (in promise) TypeError: setUser is not a function

有人可以帮助我吗?我试图弄清楚几个小时 我读到不应该在任何地方都使用钩子,但是我猜一个可以处理Submit的函数就可以了吗?

我还尝试将代码直接放在onSubmit中:

onSubmit={async (event) => {
          event.preventDefault();
          const obj = {
            Email: email,
            Password: password,
          };

          loginSession(obj);
          const session = await getUserData();
          setUser(session);
        }}
   
    Prints the same error

0 个答案:

没有答案