嘿,我目前正在尝试使用钩子和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