2017-07-07 203 views
0

我處於需要在點擊鏈接時觸發Google分析事件的情況。我寫的目的的處理程序:在reactJS方法中取消註冊e.preventDefault

handleClick(e){ 
    e.preventDefault(); 
    // -------------------------- 
    GA code ... 
    // -------------------------- 
    // now how can I re-eanble the link 
    // e.target.click() and similar methods are not working for me 

} 

但GA事件被觸發後,我無法找到一個方法來從鏈接取消綁定的preventDefault(與之反應的「鏈接」組件創建)。

任何指針都會有幫助。

回答

1

您可以嘗試更新狀態。 下面的示例我試圖有條件地附加事件處理程序.. 我已經刪除第一次調用後附加到按鈕onClick事件的處理程序。

我也試過有條件地執行e.preventDefault的鏈接。

https://codesandbox.io/s/MQnoVJKJR

import React from 'react'; 

export default class Hello extends React.Component { 
    state = { 
    btnClicked: false, 
    linkClicked: false, 
    }; 
    constructor() { 
    super(); 
    } 
    handleClick(e) { 
    e.preventDefault(); 
    alert('button clicked'); 
    this.setState({ 
     btnClicked: true, 
    }); 
    } 
    handleLinkClick(e) { 
    if (!this.state.linkClicked) { 
     e.preventDefault(); 
    } 
    this.setState({ 
     linkClicked: true, 
    }); 
    } 
    render() { 
    return (
     <div> 
     <div> 
      <button 
      onClick={!this.state.btnClicked && this.handleClick.bind(this)}> // Binding onClick event to state change 

      Click Me 
      </button> 
     </div> 
     <a 
      href="https://www.google.co.in" 
      target="_blank" 
      onClick={this.handleLinkClick.bind(this)} 
     > 
      Go to Google.com 
     </a> 
     </div> 
    ); 
    } 
} 
+0

感謝克裏希納,但似乎是一個問題。 With是樣本,當點擊第一次鏈接時,linkClicked爲false將不會發生任何事情。 – kallada

+0

是的,因爲除了更新狀態之外,我沒有任何其他代碼。你將得到GA代碼將被執行,並在下一次點擊,你將能夠導航到你點擊的鏈接。您可以根據您的要求進行修改。 –

+0

好吧。但是,如果我們可以解除e.preventDefault - 就像我們用jQuery所做的一樣 - 對我的情況來說是理想的。 – kallada