reactjs - Wanneer ik probeer een aangepaste hook-functie te importeren, krijg ik een TypeScript-fout
Ik probeer mijn aangepaste hookfunctie (RegisterUser) te importeren op mijn registratiespagina. Maar wanneer ik probeer te importeren zoals const { RegisterUser }=UseFirebase(), krijg ik een fout die zegt const RegisterUser: any Property 'RegisterUser' does not exist on type 'readonly [(email: string, password: string, name: string, history: any) => Promise
Dit is mijn aangepaste hook-functie.
export default function UseFirebase() {
const [user, setUser] = useState({})
const [error, setError] = useState('')
const [admin, setAdmin] = useState(false)
const [isLoading, setIsLoading] = useState(true)
const auth = getAuth()
// REGISTER WITH EMAIL AND PASSWORD
const RegisterUser = async (email: string, password: string, name: string, history: any) => {
setIsLoading(true)
const userCredential = await createUserWithEmailAndPassword(auth, email, password)
const newUser = {
email,
displayName: name
};
setUser(newUser);
setError('')
// Pass userCredential.user instead of auth.currentUser
updateProfile(userCredential.user, {
displayName: name
}).then(() => { }).catch((error) => { });
history.replace('/');
}
return [RegisterUser] as const
}
Kan iemand mij alsjeblieft helpen? Hoe kan ik de fout oplossen?
Antwoord #1
Ik weet niet precies wat je probeert te doen, maar je hebt je component getypt als React.FunctionComponent<IUseFirebaseProps> terwijl je [RegisterUser] as const teruggeeft en RegisterUser is niet het juiste retourtype voor React.FunctionComponent<IUseFirebaseProps> of React.ReactElement<any, any> | null.
Als je probeert een aangepaste hook te maken, moet je React.FunctionComponent<IUseFirebaseProps> en React.ReactElement<any, any> | null verwijderen, die niet nodig zijn in een aangepaste hook.
Ook hoeft een custom hook geen props van het type React.PropsWithChildren<IUseFirebaseProps> te ontvangen, misschien gewoon IUseFirebaseProps als een normale functieparameter gebruiken.
Ik gok hier, maar je hebt waarschijnlijk zoiets nodig:
// type for the RegisterUserFunction
type RegisterUserFunction = (
email: string,
password: string,
name: string,
history: any
) => Promise<void>;
const UseFirebase = (
props: IUseFirebaseProps, // it's not the props from a component, but more like a normal function parameter
context?: any
): [RegisterUserFunction] => {
// other hooks
// REGISTER WITH EMAIL AND PASSWORD
const RegisterUser: RegisterUserFunction = async (
email: string,
password: string,
name: string,
history: any
) => {
// your function
};
return [RegisterUser]; // no need to use as const
};
