2017-01-04 10 views
1

Ich habe eine Header-Komponente, die eine Schaltfläche enthalten, und ich möchte diese Taste eine andere Komponente (modal Seite) angezeigt werden, wenn es angeklickt wird.So rufen Sie eine Komponentenmethode von einer anderen Komponente auf?

Kann ich etwas tun, wie folgt aus:

Hier ist meine Header-Komponente:

import ComponentToDisplay from './components/ComponentToDisplay/index' 

class Header extends React.Component { 
    constructor(props) { 
    super(props) 
    } 

    props : { 
    user: User 
    } 

    _handleInvitePlayerClick =() => { 
    this.refs.simpleDialog.show(); 
    } 

    render(){ 

    return(
    <Button onClick={this._handleInvitePlayerClick} ><myButton/></Button> 
    <ComponentToDisplay /> 

    ) 
    } 
} 

Hier ist meine Komponente für die modal-Seite, die angezeigt werden soll, wenn die Taste auf der anderen Komponente angeklickt wird:

class ComponentToDisplay extends React.Component { 

componentDidMount() { 

} 

render() { 

return (

<div> 
    <SkyLight 
    ref="simpleDialog" 
    title={"Title for the modal"}> 
    {"Text inside the modal."} 
    <Button onClick={() => this.refs.simpleDialog.hide()}>{"Close modal"}</Button> 
    </SkyLight> 
</div> 
) 
} 
} 

Bibliothek für die modale verwendet: https://github.com/marcio/react-skylight

+1

sollten Sie die 'ref'-Stütze zu Ihrem' ComponentToDisplay' hinzufügen, damit es unter 'this.refs' mindestens – stinodes

+1

registriert wird, aber in aller Ehrlichkeit sollten Sie nur einen Zustand auf Klick aktualisieren und das als Prop zu übergeben Ihr Dialog, damit er entscheiden kann, ob er rendern soll oder nicht. – stinodes

+0

Mögliches Duplikat [ReactJS - Call Eine Component-Methode von einer anderen Komponente] (https://stackoverflow.com/questions/39119537/reactjs-call-one-component-method-from-another-component) –

Antwort

1

Mehr wie folgt aus:

class Header extends React.Component { 
    constructor(props) { 
     super(props) 
    } 

    props: { 
     user: User 
    } 

    render() { 
     return (
      <Button onClick={() => this.refs.componentToDisplay.showMe()}><myButton /></Button> 
      <ComponentToDisplay ref="componentToDisplay" /> 
     ) 
    } 
} 

sicher zu sein, eine showMe() Methode auf Ihrem Kind Komponente zu entlarven:

class ComponentToDisplay extends React.Component { 

    showMe() { 
     this.refs.simpleDialog.show(); 
    } 

    render() { 
     return (
      <div> 
       <SkyLight 
        ref="simpleDialog" 
        title={"Title for the modal"}> 
        {"Text inside the modal."} 
        <Button onClick={() => this.refs.simpleDialog.hide()}>{"Close modal"}</Button> 
       </SkyLight> 
      </div> 
     ) 
    } 
} 

Im Grunde, was hier vor sich geht Sie das SkyLight eigene Methode show() Methode in Ihrem Kind Komponente wird wickeln (in diesem Fall showMe()). Dann fügen Sie in Ihrer übergeordneten Komponente einen Verweis zu Ihrer enthaltenen untergeordneten Komponente hinzu, so dass Sie darauf verweisen und diese Methode aufrufen können.

+0

Nizza danke, ich war von den refs verwirrt, aber jetzt macht es Sinn – AziCode

+1

Froh, dass ich helfen konnte. –

Verwandte Themen