2016-12-21 11 views
2

JQueryはReactJSのコード臭です。なぜなら、それはDOMを使って作業を行うためです。しかし、私はそれを使用するのが難しいいくつかの場所を見つけました。これは可能な限りより良い方法を見つけたいと思う1つの例です。ReactJSでのjQueryコールの回避方法

私はちょうど...フィールドが設定されているかどうかに基づいて、divの上にメッセージを表示または非表示にする

javascriptをしようとしている:

if (this.props.loginInfo.userId === ''){ 
    $("#errorMessageDiv").attr('class', 'visible'); 
} else{ 
    $("#errorMessageDiv").attr('class', 'invisible'); 
} 

JSX:

<div id="errorMessageDiv" className="invisible"> 
    <h1 id="credentials" className="login-error-message">&nbsp;Please Enter Proper Credentials</h1> 
</div> 
+1

通常は、クラスをバインドしてください。 – SLaks

答えて

5

classnamesライブラリをご覧ください。

基本的には、条件を持たないクラス名をtrueにすると、好きなクラス名が追加または削除されます。次のスニペットを参照してください。

import classNames from 'classnames' 

<div 
    id="errorMessageDiv" 
    className={ classNames({ 
    'visible' : this.props.loginInfo.userId === '', 
    'invisible' : this.props.loginInfo.userId !== '', 
    'some-other-class-name' : your_condition, 
    'will-be-available-definetely' : true 
    }) } 
> 
    <h1 id="credentials" className="login-error-message">&nbsp;Please Enter Proper Credentials</h1> 
</div> 

あなたは一つだけ条件がある場合は、次の操作を実行できます

import classNames from 'classnames' 

<div 
    id="errorMessageDiv" 
    className={ this.props.loginInfo.userId === '' ? 'visible' : 'invisible' } 
> 
    <h1 id="credentials" className="login-error-message">&nbsp;Please Enter Proper Credentials</h1> 
</div> 
+0

私はこれが大好き!しかし、クリックイベント後にこれをどのように起動させるのですか?それは可能ですか?現在、ページをロードすると、デフォルトでログインメッセージが表示されます。 – nikotromus

+0

イベントのスタイルを複雑にしてスコープから外しています...おかげでFurkanO !!! – nikotromus

+1

ええと、イベントが発生したときに値を変更する必要があります。その結果、条件が変わり、最終的にクラス名が変更されます。私は方法を見たり、それを必要とすることはできません。 – FurkanO

1

あなたがのレンダリングに条件をバインドする必要があるので、あなたは、現在の状態がビューにレンダリングする方法を定義する必要がありますエラーメッセージ。

var visibleClass = this.props.loginInfo.userId === '' ? 'visible' : 'invisible'; 
return <div id="errorMessageDiv" className={visibleClass}> 
    <h1 id="credentials" className="login-error-message">&nbsp;Please Enter Proper Credentials</h1> 
</div> 
関連する問題