reactjs - Når jeg prøver at importere en brugerdefineret hook-funktion, får jeg en typescript-fejl
Jeg forsøger at importere min brugerdefinerede hook-funktion (RegisterUser) på min registreringsside. Men når jeg forsøger at importere på denne måde const { RegisterUser }=UseFirebase(), får jeg en fejl, som er const RegisterUser: any Property 'RegisterUser' does not exist on type 'readonly [(email: string, password: string, name: string, history: any) => Promise<void>]'.
Dette er min brugerdefinerede hook-funktion.
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 nogen hjælpe mig, tak? Hvordan kan jeg løse fejlen?
Svar #1
Jeg er ikke sikker på, hvad du prøver at gøre, men du har skrevet din komponent som React.FunctionComponent<IUseFirebaseProps>, men du returnerer [RegisterUser] as const, og RegisterUser er ikke den korrekte returtype for React.FunctionComponent<IUseFirebaseProps> eller React.ReactElement<any, any> | null.
Hvis du prøver at lave en brugerdefineret hook, bør du fjerne React.FunctionComponent<IUseFirebaseProps> og React.ReactElement<any, any> | null, som ikke er nødvendige i en brugerdefineret hook.
Også behøver en brugerdefineret hook ikke at modtage props af typen React.PropsWithChildren<IUseFirebaseProps>, måske bare brug IUseFirebaseProps som en normal funktionsparameter.
Jeg gætter her, men du har sandsynligvis brug for noget som dette:
// 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
};
