J'essaie de mettre en place un hook contextuel pour ma page de connexion. J'utilise du tapuscrit. J'ai démarré le hook contextuel mais j'ai des problèmes avec les déclarations de type. Lorsque j'essaie d'utiliser setUser, l'erreur suivante apparaît : La propriété 'setUser' n'existe pas sur le type '{}'.
C'est mon crochet contextuel jusqu'à présent.
import { createContext, ReactNode, useEffect, useState } from "react" interface Props { children?: ReactNode } export const UserContext = createContext({}) export function UserContextProvider({children}: Props) { const [user, setUser] = useState(null) return ( <UserContext.Provider value={{user, setUser}}> {children} </UserContext.Provider> ) }
Voici mon code de connexion.
import { Link, Navigate } from "react-router-dom" import axios from 'axios' import { UserContext } from "../UserContext" const Login = () => { const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [redirect, setRedirect] = useState(false) **const {setUser} = useContext(UserContext)** async function handleLogin(e: any) { e.preventDefault() try { const userInfo = await axios.post('/auth/login', {email, password}) setUser(userInfo) alert('Login') setRedirect(true) } catch (e) { alert('Login failed') } } if(redirect){ return <Navigate to={'/'} /> } return ( <div> <div> <h1>Login</h1> <form onSubmit={handleLogin}> <input type="email" placeholder="your@email.com" value={email} onChange={e => setEmail(e.target.value)}/> <input type="password" placeholder="password" value={password} onChange={e => setPassword(e.target.value)}/> <button>Login</button> <div> Don't have an account? <Link to={"/auth/register"}> Sign Up</Link> </div> </form> </div> </div> ) } export default Login
Vous avez besoin de
, un objet vide, qui n'a pas de propriétés définies par l'utilisateur.UserContext
变量指定类型。因为您在createContext
中为其指定了{}
参数,所以 Typescript 假定上下文的类型为React.Context<{}>
。因此,当您尝试使用上下文对象时,您会得到一个{}
pourUserContext
Pour déclarer le type de vous pouvez :Notez que pour certains d’entre eux, vous devrez rédiger des chèques nuls plus tard. Voir ici
pour plus d'informations. 🎜