reactjs - React Typescript: Skicka funktion som props med argument
Så detta problem har hängt över mig de senaste dagarna och jag svär att jag har tittat på nästan alla för att försöka lösa det. Jag behöver helt enkelt anropa en funktion som skickas från en föräldrakomponent onClick inuti en barnkomponent. Funktionen tar emot parametrar, och det är i parametrarna felet ligger.
Jag är medveten om att jag förmodligen skulle kunna exportera och importera funktionen, men detta är något jag enkelt skulle kunna göra i vanlig JavaScript och React, så jag är säker på att det måste vara möjligt. Jag är bara inte den mest kompetenta med TypeScript för tillfället.
Föräldrakomponent
// Promise Function I am passing to the child
function parentFunction(email: string, password: string, userName: string) {
return promiseFunction(email, password)
.then((result) => {
return updateProfile({
displayName: userName,
})
})
.catch((error) => {
console.log(error);
});
}
// Passing to child component
return (
<div>
<ChildComponent parentFunction = {parentFunction}/>
</div>
)
Barnkomponent
Så eftersom det är en onClick-funktion vet jag att jag behöver hantera event-funktionen.
type Props = {
parentFunction: (event: React.MouseEvent<HTMLButtonElement>) => Promise<void>;
}
export default function childComponent(props: Props){
return(
<button onClick={props.parentFunction}></button>
)
}
Typproblem
Nu, om det inte fanns några parametrar skulle det inte finnas några problem och funktionen skulle fungera bra vid klick. Men.
Funktionen är av typen
parentFunction(email: string, password: string, userName: string): Promise<void>
onClick-funktionen är av typen
MouseEventHandler<HTMLButtonElement>
Jag har försökt att lägga till parametrarna i Props-typfunktionen men det löser bara problemen med funktionstypen, onClick-typproblemet finns fortfarande kvar och vice versa.
Mitt försök att lösa problemet
type Props = {
parentFunction: (
email: string,
password: string,
userName: string
event?: React.MouseEvent<HTMLButtonElement>
) => Promise<void>;
}
Håller jag på med det här på fel sätt? Missar jag helt något viktigt för att skicka funktioner i TypeScript? All hjälp skulle uppskattas mycket.
Svar #1
Du kan prova så här
För att lägga till händelsehanterare för barnkomponent
export default function childComponent(props: Props){
return(
<button onClick={(e) => props.parentFunction(e)}></button>
)
}
Hanterartypen kan vara som nedan
type Props = {
parentFunction: (event: MouseEvent<HTMLButtonElement>: e, email?: string, password?: string, userName?: string) => Promise<void>;
}
Faktisk händelsehanterare
const parentFunction = (event: MouseEvent<HTMLButtonElement>: e, email?: string, password?: string, userName?: string) => ...
