2017-01-28 4 views
1

Wenn der Benutzer Absenden-Button geklickt Ich brauche diese Eingabefelder zu einer Instanz von Message-Schnittstelle zu binden, dies zu tun, ich in der Klasse
und stellen Sie die Werte des Eingangs ein Message-Objekt erstellt Werte in Form (keepNameUpdated()).„this“ undefined in React Komponente Ereignishandler

Wenn ich etwas gebe es Würfe

Uncaught TypeError: Cannot read property 'message' of undefined

so sagt es "der" nicht definiert ist, aber warum?

hier ist mein Code:

 export class IMessage { 
      Name: string; 
      Surname: string; 
     } 



    export default class Contact extends React.Component<IContactProperties, IWebPartState> { 
     message : IMessage; 
     constructor(props: IContactProperties, state: IWebPartState) { 
      super(props); 
      this.message = new IMessage(); 
     } 
public render(): JSX.Element { 
      return (
       <div className="row"> 
        <div className="form-group col-md-6"> 
         <label >Name</label> 
         <input type="text" className="form-control" onChange={this.keepNameUpdated} id="name" placeholder="Adiniz" /> 
         </div> 
         <div className="form-group col-md-6"> 
         <label >Surname</label> 
         <input type="text" className="form-control" id="surname" placeholder="Soyadiniz" /> 
         </div> 
         <div className="form-group col-md-12"> 
         <button type="button" className="btn btn-success" onClick={this.clickSubmit}><i className="fa fa-save"></i> Submit</button> 
         </div> 
        </div> 
       ); 
    } 

     private keepNameUpdated(e) { 
      this.message.Name=e.target.value; 
      } 
      private keepSurnameUpdated(e) { 
      this.message.Surname=e.target.value; 
      } 

warum diese Referenz nicht definiert ist? enter image description here

+0

Bits des Codes fehlen. Wo ist die Renderfunktion? – x0n

+0

Ich tring es einfach zu machen, diese Rückkehr jsx Elemente Methode gehört eigentlich zu Render-Funktion – TyForHelpDude

+0

Besser als unvollständig abzuschließen :) – x0n

Antwort

1

IIRC, müssen Sie die Handler-Funktionen binden, so dass ihre Vorstellung von this bezieht sich auf die Instanz der React-Komponente. Also, in Ihrem Konstruktor, fügen Sie die folgenden Zeilen:

this.keepNameUpdated = this.keepNameUpdated.bind(this); this.keepSurnameUpdated = this.keepSurnameUpdated.bind(this);

Quelle: https://facebook.github.io/react/

+0

Ja, es scheint mein Problem gelöst, aber warum muss ich es explizit angeben? Was ist, wenn ich 100 Eigentum habe? – TyForHelpDude

+1

Dies ist die Art und Weise, wie Event-Handler in Javascript- und Browser-DOMs arbeiten. Ich weiß nicht Reagieren Sie gut genug, um Ihnen zu helfen, aber vielleicht gibt es einige Hilfsfunktionen im Rahmen, die die Arbeit für Sie erledigen werden ... Lesen Sie mehr Dokumentation :) – x0n