2016-11-12 1 views
1

現時点では、私はリアクションイベントを研究中で、イベントバブルとキャプチャに関する珍しい問題に気付きました。React Synthetic Eventsコンポーネントによるバブルキャプチャ

divタグのネストされたグループ(すべてonClick/onClickCapture)を使用すると、期待どおりに動作します。イベントは、DOMツリーの「上/下」をトリガします。

しかし、Divsの1つがReact.Componentである場合、イベントを捕捉しません。 これは、Reactがコンポーネントを常に「スタンドアロン」にする必要があるため、他のコンポーネントによって生成されたイベントを(ネストされている場合でも)処理するべきではないという考え方によるものだと思います。

誰でも私の考えに正しく当てはまるか教えていただけますか?

私はデモを作成しました。このデモでは、Component "Top"を標準divに置き換えると、バブルとキャプチャが予想どおりに行われます。

http://codepen.io/anon/pen/KNdBYW?editors=0010

const Top = (props) => (
    <div id="A" onClick={props.bubbleA} onClickCapture={props.captureA}> 
    {props.children} 
    </div> 
) 

const App = (props) => (
    <Top>A:Top Event 
    <div id="B" onClick={props.bubbleB} onClickCapture={props.captureB}>B:I Propagate 
     <div id="C" onClick={props.bubbleC} onClickCapture={props.captureC}>C:Don't Propagate 
     </div> 
    </div> 
</Top> 
) 

const props = { 
    bubbleA: (e) => alert("bubble:A Target:" + e.target.id), 
    captureA: (e) => alert("Capture:A Target:" + e.target.id), 
    bubbleB: (e) => alert("bubble:B Target:" + e.target.id), 
    captureB: (e) => alert("Capture:B Target:" + e.target.id), 
    bubbleC: (e) => alert("bubble:C Target:" + e.target.id), 
    captureC: (e) => alert("Capture:C Target:" + e.target.id) 
} 

ReactDOM 
    .render(<App {...props} />, 
    document.getElementById("app")) 

答えて

0

私はこれを働きました!バグがありました。 Topコンポーネントにどのような小道具も渡していないので、イベントは呼び出されません。私は以下が必要でした。愚かな間違いだが、リファクタリング時に簡単にやり遂げる。

<Top {...props}> 
関連する問題