2017-10-10 5 views
1

フォームの検証後に属性refを読み取ることができません。結果はundefinedなので、なぜ私は理解できません。反応のDOM要素の属性refを読み取ることができません

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> 
    ) 
} 

}

答えて

2

あなたがコンポーネント自体に格納され、値が

console.log(this.name) 

eの下で利用可能であるべきであるあなたが入力をクリックしたときにトリガされますイベントです。あなたの場合、矢印関数を使用しているので、thisはコールバックのコンテキストでHomeコンポーネントです。

EDIT:

あなたはまた、それが正しいthisへのアクセス権を持つようにhandleSubmitをバインドする必要があります。

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

答えていただきありがとうございます。マリオです。私は試しましたが、私はこのエラーがあります: "未定義のプロパティ 'name'を読み取ることができません –

+0

@NedjimDNあなたは正しいです、あなたの' handleSubmit'メソッドはコンポーネントにバインドされていないので 'this'にアクセスできません。私はその答えを更新しました。 –

+0

ありがとう、マリオ!それは今働いています:) –

0

あなたが代わりにあなたはまた、この

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

あなたの答えをありがとうございました。私は試みましたが、私はこのエラーがあります: "未定義のプロパティ '名前'を読むことができません" –

0

e変数がイベントを保持しているを含める必要があり、この console.log(e.name.value);

this.name.valueをログに記録する必要があるかもしれません:Homeコンポーネントにこれを追加します。イベントが発生した要素を取得するには、e.targetを探しています。

console.log(e.target.name.value); 
関連する問題