2017-03-15 5 views
0

Ich versuche zu denken, die Art der Reaktion, aber ich kann keine Lösung finden, wie die .submit() Methode der Formularkomponente aufgerufen wird.React - übergeben Ref an Eltern

Ich habe eine Material-UI Dialog, wo ich die Tasten über Aktionen-Eigenschaft übergeben müssen. Von dieser Aktionskomponente möchte ich die .submit()-Methode der Form-Komponente aufrufen, die ein Kind des Dialogs ist.

Muss ich die formRef an den Dialog übergeben, um sie dann an die Aktionen zu übergeben, und wie würde ich das tun? Oder gibt es eine Reaction Weise Ich verpasse es?

class FormDialog extends React.Component { 
    render() { 
     return (
      <Dialog actions={<Actions />} > 
       <Form /> 
      </Dialog> 
     ) 
    } 
} 

const Actions = (props) => { 
    return (
     <FlatButton 
      label="Submit" 
      onTouchTap={() => formRef.submit()} 
     /> 
    ) 
} 

const Form =() => { 
    let formRef; 
    return (
     <AutoForm 
      ref={ref => formRef = ref} 
      onSubmit={doc => db.save(doc)} 
      > 
     </AutoForm> 
    ) 
} 
+1

Was Sie tun können, ist, erstellen Sie eine Methode in der oberen Komponente (wo Sie es aufrufen) und übergeben Sie es dann als Prop zu Formular herunter. Sie können sich Redux ansehen. http://redux.js.org/ – jhack

+0

@jhack Warum redux? Sie können Prop-Callbacks ohne Redux übergeben ... – AlxVallejo

Antwort

2

Alle Tasten in einer Form, die die Form type="submit", und klicken Sie auf einen von ihnen die <form /> ‚s onSubmit Handler einreichen auslösen sollte. Es besteht keine Notwendigkeit, eine Referenz zu übergeben.

Es gibt ein paar React-Wege-Noten hier:

  • Wenn Sie Dinge passieren „nach oben“ und dann wieder „nach unten“, um einen Komponentenbaum, sind Sie wahrscheinlich nicht das Problem richtig nähern.
  • Komponenten sollten niemals Methoden auf anderen Komponenten aufrufen.
  • Sofern Sie nicht genau wissen, wann sie benötigt werden, sollten Referenzen auf DOM-Elemente nur innerhalb der Komponente referenziert werden, die die Referenz besitzt.
+0

Können Sie auf diesem - "Komponenten sollten nie Methoden auf andere Komponenten aufrufen." Was ist mit Call-Back-Funktionen? –

+0

Callbacks durch Requisiten zu übergeben ist ein gutes und nützliches Muster. Aber ein Elternteil, der so etwas wie 'childComponet.setState()' oder ein Kind tut, das 'parentComponent.submit()' tut, ist nicht gut. –

+0

Aight. Wie wäre es mit der obigen Frage? Gibt es eine Möglichkeit, mit einer Callback-Funktion eine Lösung zu finden? –

Verwandte Themen