2017-01-20 5 views
1

私はデバッグに苦労しました。 jsbinには、エラーが何であるかを知る方法がありません。私の仲間のコンソールやコンソールを開いたときに、私のエラーが何であるかを明確に示すことはできません。onBlur setStateが動作しません(jsbin)

http://jsbin.com/doletanole/1/edit?html,js,console,output

class HelloWorldComponent extends React.Component { 
    constructor() { 
    super() 
    this.getInput = this.focusHandler.bind(this) 
    this.state = {hasError:false} 
    } 
    focusHandler(e) { 
    if(e.target.value === ''){ 
     this.setState({hasError:true}) 
    } 
    } 
    render() { 
    return (  
     <input placeholder="username" type="text" onBlur={this.focusHandler}/> 
{this.state.hasError ? <span>Username is required</span> : ''} 
    ); 
    } 
} 

を反応させるデバッグするために、任意のより良い方法はありますか?私は、ユーザーが状態の入力ベースから離れるときにエラーメッセージを表示したいだけです。

答えて

1

は、ミスのこれらの種類を避けるために、同じ名前を使用しようと、私はあなたがusernameが空白でない場合falseに状態値をリセットする必要があると思う、このコードを試してみてください:

class HelloWorldComponent extends React.Component { 
    constructor() { 
    super() 
    this.focusHandler = this.focusHandler.bind(this) 
    this.state = {hasError:false} 
    } 
    focusHandler(e) { 
    this.setState({hasError: e.target.value != '' ? false : true}); 
    } 
    render() { 
    return ( 
     <div> 
     <input placeholder="username" type="text" onBlur={this.focusHandler}/> 
     {this.state.hasError ? <span>Username is required</span> : ''} 
     </div> 
    ); 
    } 
} 

作業例を確認してください:http://jsbin.com/cozenariqo/1/edit?html,js,console,output

+0

私はそれを得ました、多くのありがとう! –

+0

'this.setState({hasError:e.target.value!= ''?false:true});'この行を書く上手な方法はありますか? –

+0

これは次のように直接書くことができます: 'this.setState({hasError:!e.target.value})' –

0

まず、コンポーネント(または配列ですが、それほど一般的ではありません)からトップレベル要素を1つだけ返す必要があります。レンダリングされた出力を1つの要素にラップします。

render() { 
    return (
     <div> 
      <input placeholder="username" type="text" onBlur={this.focusHandler}/> 
      {this.state.hasError ? <span>Username is required</span> : ''} 
     </div> 
    ); 
} 

第2に、focusHandlerイベントを正しくバインドしていません。それをonBlur={this.focusHandler.bind(this)}に変更します。推奨読書:React, ES6, Autobinding, and createClass()

コードの読み込みをブロックするエラーは、折り返し要素からのものでした。 JS BinはBabelエラーをユーザーによく伝播しません。私はそれを使用せず、代わりにBabelとWebpackでローカル開発環境をセットアップすることをお勧めします。コンストラクタのメソッドを結合するたびに

+0

これはなぜ機能しませんか? http://jsbin.com/qejubazogu/1/edit –

+0

あなたのリンクは正常に動作します。これがあなたの質問に答えた場合は、それの隣にあるemptチェックマークを選択して正しいものとしてマークしてください。そうでない場合は、質問を洗練してください。 –

+0

テキストボックスに値を入力せずに入力を集中してぼかしてみましょう。 –

関連する問題