2016-09-13 18 views
0

クリックハンドラでli要素にアクセスしてクリックしたときにクラスを追加するにはどうすればよいですか?react reduxの要素ノードにアクセスする方法

const Type = React.createClass({ 
    clickHandler: function() { 
    ... 
    }, 
    render() { 
    const classType = `cell type type-${this.props.name}` 
    return (
     <li 
     onClick={this.clickHandler} 
     className={classType} 
     > 
     {this.props.name} 
     </li> 
    ) 
    } 
}) 
+0

私は反応自体に慣れていませんが、イベントラッパーを持つほとんどすべてのフレームワークはclickHandler引数の参照をアクションハンドラのscope/viewModel/thisに渡し、2番目のパラメータはしばしばdomノード自体です。引数リストを見るためにclickHandlerを中断しましたか? –

+1

こちらをご覧ください:https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html#under-thehood-autobinding-and-event-delegation –

答えて

-1

あなたがliのデータのいずれかを取得したい場合は要素を追加するとき、あなただけのイベント関数の呼び出しで追加することもできます。あなたがのonClickでclassTypeにアクセスしたいと言う:

const Type = React.createClass({ 
    clickHandler: function (classType) { 
    /* Do something with the li classType */ 
    }, 
    render() { 
    const classType = `cell type type-${this.props.name}` 
    return (
     <li 
     onClick={() => this.clickHandler(classType)} 
     className={classType} 
     > 
     {this.props.name} 
     </li> 
    ) 
    } 
}) 
1

ほとんど(またはReduxの私はそれがあなたのものかどう推測)コンポーネントの状態でliクラス名や状態を保存することですこれを行う方法を「反応しFUL」クリックハンドラを使用して変更します。

const Type = React.createClass({ 
    clickHandler: function() { 
    this.setState({wasClicked: true}); 
    }, 
    render() { 
    const classType = `cell type type-${this.props.name}` + (this.state.wasClicked ? " some-new-class-name" : " ") 
    return (
     <li 
     onClick={this.clickHandler.bind(this)} 
     className={classType} 
     > 
     {this.props.name} 
     </li> 
    ) 
    } 
}) 

あなたはES6を使用している場合はclickHandlerに「これ」スコープを(this.setStateへのアクセスを得るために)バインドする必要があり注意。

関連する問題