2017-10-10 13 views
1

Je ne peux pas lire l'attribut ref après la validation du formulaire. Le résultat est undefined et je ne comprends pas pourquoi.Je ne peux pas lire l'attribut 'ref' de l'élément dom dans la réaction

import React from 'react'; 
import {Link} from 'react-router-dom'; 

export default class Home extends React.Component {. 

handleSubmit(e){ 
    e.preventDefault(); 

    console.log(e.name.value); 
} 

render() { 
    return (
     <div> 
      <form onSubmit={this.handleSubmit}> 
       <input type='text' ref={ (input) => this.name = input} /> 
       <input type='text' ref={ (input) => this.topic = input} /> 
       <input type='submit'/> 
      </form> 
     </div> 
    ) 
} 

}

Répondre

2

vous stockez dans le composant lui-même, la valeur devrait être disponible sous

console.log(this.name) 

e est l'événement qui se déclenche lorsque vous cliquez sur l'entrée. Dans votre cas, vous utilisez une fonction de flèche, donc this dans le contexte du rappel est le composant Home.

EDIT:

Vous devez également lier handleSubmit afin qu'il ait accès au droit this. Ajouter cela au Home composant:

constructor() { 
    super() 
    this.handleSubmit = this.handleSubmit.bind(this) 
} 
+0

Merci pour votre réponse Mario. J'ai essayé, mais j'ai cette erreur: "Impossible de lire la propriété 'name' de undefined" –

+0

@NedjimDN vous avez raison, votre méthode 'handleSubmit' n'a pas accès à' this' car il n'est pas lié au composant. J'ai mis à jour ma réponse avec ça. –

+0

Merci Mario! Ça marche maintenant :) –

0

Vous devrez peut-être ouvrir une session this.name.value au lieu de cette console.log(e.name.value);

Vous devez également inclure ce

constructor(props){ 
    super(props) 
    this.handleSubmit = this.handleSubmit.bind(this) 
} 
+0

Merci pour votre réponse Adil. J'ai essayé, mais j'ai cette erreur: "Impossible de lire la propriété 'nom' de indéfini" –

0

La variable e organise un événement. Vous recherchez e.target pour obtenir l'élément sur lequel l'événement a été déclenché.

console.log(e.target.name.value);