2017-07-03 3 views
1

気温を華氏から華氏に変換するページを書いています。React:onChange値を入力フィールドに更新しない

ユーザーは、最初の入力フィールドの温度を摂氏で表します。 次に、関数changeCelciustoFahrを呼び出す必要があります。

convertCelciustoFahrはstate.fahrenheitをthis.setState()で変更し、華氏での温度を2番目の入力フィールドに更新します。ここで

class App extends Component { 

constructor(props){ 
    super(props); 
    this.state = { 
    //Temperature in fahrenheit 
    fahrenheit: 0, 
    //Temperature in celcius 
    celcius: 0, 
    }; 
    //Binding 
    this.convertCelciustoFahr = this.convertCelciustoFahr.this; 
} 


//Converts celcius to fahrenheit 
convertCelciustoFahr(event){ 
    var celcius = Number(event.target.value); 
    this.setState(function(state,props){ 
    return{ 
     fahrenheit: (celcius-32)/(5/9), 
    } 
    } 
) 
} 

render() { 
    return (
    <div className="App"> 

    <h1>Celcius to Fahrenheit converter</h1> 
    <form id="conversion"> 
     <input className="Celcius" placeholder="°C" onChange={this.convertCelciustoFahr} /> 
     <p>=</p> 
     <input className="Fahrenheit" value={this.state.fahrenheit} placeholder="°F" /> 

    </form> 
    </div> 
); 
} 
} 


export default App; 

はhtmlです:

<body> 
<noscript> 
    You need to enable JavaScript to run this app. 
</noscript> 
<div id="root"> 
<div data-reactroot="" class="App"> 
    <h1>Celcius to Fahrenheit  converter</h1> 
    <form id="conversion"> 
    <input class="Celcius" placeholder="°C"> 
    <p>=</p> 
    <input class="Fahrenheit" value="0" placeholder="°F"> 
    </form> 
</div> 
</div> 

Javascriptが有効になっていないと、onChangeイベントがトリガされていないようです。

なぜonChange値を華氏の入力フィールドに更新しないのですか?

+0

を使用。 – puolimatkankrouvi

+0

あなたが正しいようです。 –

答えて

3

バインドJSXには、イベントが括弧なしで関数名をハンドラ・渡しので、そうではないのです

this.convertCelciustoFahr = this.convertCelciustoFahr.bind(this); 
+0

-1 "*これは自動的にこれに結びつくので矢印機能を使用できます" *が間違っています。矢印関数は 'this'を持たないので、バインドしません。 – Chris

+1

こんにちは@Chrisはいあなたは正しいです私はそれを説明しなかったので私は私の答えを更新しました:)それは現在の文脈の字句にバインドされている矢印fucntionsされている必要があります –

+0

私はそれをし、今は動作します。ありがとう。 – puolimatkankrouvi

関連する問題