reactjs - Anropa en funktion med dess namn (sträng) i React.Component med TypeScript
Jag skriver en React-app med TypeScript. State för min komponent ser ut så här:
type UploadState = {
...
modal: string | null
...
}
I min render har jag:
render() {
return <div>{this.renderModal()}</div>
}
någonstans i koden har jag:
this.setState({ modal: 'mappingModal' })
och slutligen är renderModel:
renderModal = () => {
if (this.state.modal === null) {
return
}
return this[modal as keyof this]() //It doesn't work
}
JAG FÖRVÄNTAR mig att få returvärdet av mappingModal:
mappingModal = () => {
return <h1>Some text or whatever!</h1>
}
Men jag får detta fel på grund av () i this[modal as keyof this]() :
Cannot invoke an expression whose type lacks a call signature.
Type '{}' has no compatible call signatures.ts(2349)
Och om jag tar bort () får jag detta fel i webbläsaren:
Warning: Functions are not valid as a React child.
This may happen if you return a Component instead of <Component /> from render.
Or maybe you meant to call this function rather than return it.
Någon lösning?
UPPDATERING (POTENTIELL SVAR)
Det verkar som om jag använder this[modal as keyof Upload]() - och Upload är naturligtvis namnet på min komponent - kommer jag inte att ha några problem. Förhoppningsvis kommer det inte orsaka några framtida buggar
Svar #1
Det verkar som om jag använder this[modal as keyof Upload]() - och Upload är förstås mitt komponentnamn - kommer jag inte ha några problem. Så här:
class Upload extends React.Component<UploadProps, UploadState> {
...
renderModal = () => {
if (this.state.modal === null) {
return
}
return this[modal as keyof Upload]()
}
...
}
