2016-08-03 11 views
2

map関数内の要素のクラスまたはidまたはrefの参照を取得できますか?私はREF =アイテムやjQueryのReactJS JQueryで使用されるループ/マップの中からrefs/class/idを取得

でクラス= hakuna-マタタ配列やオブジェクトにアクセスしたい

componentDidMount(){ 
     console.log(ReactDOM.findDOMNode(this.refs.items)); 
} 
render(){ 

    var loop = Object.keys(this.state.posts).map((key) => { 
     var post = this.state.posts[key]; 
     return(
      <div key={key} className="hakuna-matata" ref="items"> 
       ... 
      </div> 
     ) 
    } 

    return {loop} 
} 

誰でも助けることができますか?してください

答えて

0

さて、あなたのloopの内容は配列です。文字列に配列を折り畳んで、HTMLコード全体を取得します。

第2に、問題はHTMLコードでjQueryを使用する場所です。 レンダリングメソッド内にある限り、コードはDOMツリーにありません。だから、jQueryにコードを解析させなければなりません:var myJqueryNode = $(loop.join());。それが原因となるので、あなたは、ループ内refを入れたくないかもしれ$('.hakuna-matata');

+0

componentDidMountはjQueryを使用するのに適した場所ですか?現時点で$( 'hakuna-matata')にしようとすると、 componentDidMountの内部で、現在のページのDOM全体を返しています。ホバーイベントのjQueryを使用していくつかのアニメーションを行いたいとします。 – Ank

+1

ああ、ありがとうございます。可能であれば、CSS Animationsを利用してください。より多くのパフォーマンスが得られます。この場合、実装するのが簡単で簡単です。それ以外の場合は、単純に反応イベントハンドラ(https://facebook.github.io/react/docs/events.html#mouse-events)を使用して、純粋なJSまたはjQueryを通じてコン​​ポーネントにアクセスできます。 – Kjell

+0

私は私はあなたに私が@ jie-trooperの答えと一緒に共有したリンクでmouseEventsを見た - onMouseOverイベントを使ってCSSを好む。回答ありがとうございます! – Ank

0

:レンダリングはあなたが簡単のようなDOMツリーを照会することができます実行された後にリアクトであなたは、イベントハンドラのいくつかの種類である場合

複製。代わりに、あなたはこれを行うことができます。

handlePost = (e, post) => { 
    //do whatever to post here... 
    //do whatever to e here... 
} 

render(){ 
    const loop = Object.keys(this.state.posts).map((key) => { 
     const post = this.state.posts[key]; 
     return(
      <div key={key} className="hakuna-matata" 
       onClick={(e) => {this.handlePost(e, post}}> 
       ... 
      </div> 
     ); 
    } 
    return {loop} 
} 

ポストをクリックすると、方法handlePostにポストオブジェクトを渡すと、あなたはrefsを使用せずに何でもそれを行うことができます。 eまたはeventを渡して、イベントオブジェクトにアクセスすることもできます。

+0

回答ありがとうございます、私はあなたのアプローチに同意します - React Event System(下記の@Kjellで共有)のonMouseOverイベントを使用して、同意します - 問題は今、このdivの子があります。オーバーレイコンテナの下にあり、テキストコンテナの下にあるので、私がカーソルを置くと、e.targetの出力によって、両方の子どもが同時に私に親のコンテナを持たせたいと思います。また、2つのdivを持つため、ホバーイベントが2回トリガーされる – Ank

+0

parentと言うと、すべてのpost divをラップする親divを意味しますか?このような場合は、ループする前にdivをラップしてrefを割り当ててください。これを使用して折り返しのdivにアクセスすることができます。 –

+0

この場合の親は「hakuna-matata」になります。 DOMツリーはhakuna-matata> overlay-container> text-containerのようになります。だから私がhakuna-matataに乗っているとき、イベント「e」は子供の要素にも言及しています。 – Ank

関連する問題