2016-03-27 78 views
7

我有一些像下面的JS。我發現,如果我刪除mdl-js-layoutonClick的按鈕的作品。否則失敗。爲什麼會這樣呢?我已經做了componentHandler.upgradeDom()ReactJS&谷歌MDL按鈕onClick不工作

'use strict'; 

module.exports = React.createClass({ 
    componentDidMount: function() { 
    console.log('update') 
    componentHandler.upgradeDom(); 
    }, 

    addExpense: function() { 
    console.log('add expense'); 
    }, 

    render: function() { 
    return (
     <div ref="appLayout" className="mdl-layout mdl-js-layout mdl-layout--fixed-drawer"> 
     <div className="mdl-layout__drawer"> 
      <span className="mdl-layout-title">Expenses</span> 
      <nav className="mdl-navigation"> 
      <a className="mdl-navigation__link" href="#">Expenses</a> 
      <a className="mdl-navigation__link" href="#">Settings</a> 
      </nav> 
     </div> 

     <main className="mdl-layout__content"> 
      <div className="page-content"> 
      <div className="mdl-grid"> 
       <div className="mdl-cell mdl-cell--12-col"> 
       <button ref="btnAddExpense" onClick={this.addExpense} className="mdl-button mdl-js-button mdl-button--raised mdl-button--accent"> 
        Add Expense 
       </button> 
       </div> 
      </div> 
      </div> 
     </main> 
     </div> 
    ); 
    } 
}); 

如果我期待到陣營調試工具,其實我可以看到的onClick應該被約束?

enter image description here

+0

https://github.com/tleunen/react-mdl/issues/254 - 你可能會覺得這很有幫助;確保點擊處理程序是具有正確的「this」對象的閉包。 –

回答

1

它看起來像MDL不與反應兼容,並防止工作從反應成分的單擊事件。希望這將在未來的更新中得到解決,但在此之前,您可以在安裝組件後手動重新添加事件來解決此問題。

componentDidMount: function() { 
    componentHandler.upgradeDom(); 
    var button = this.refs.btnAddExpense; 
    button.addEventListener('click', this.addExpense); 
}, 

Demo

+0

Agreed React使用動態模板,因此有必要升級元素。還有一個處理一些其他問題的react-mdl項目。按照http://dragablz.net/2015/07/14/react-js-and-material-design-lite/,componentHandler.upgradeElement()可能會比upgradeDom()輕一點。希望能幫助到你。 –

1

希望this回答你的問題: 隨着資源使用它顯然並不需要觸摸的DOM。

HTML 
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"> 
</script> 

<div id="container"> 
    <!-- This element's contents will be replaced with your component. --> 
</div> 

JS 
var Widget = React.createClass({ 
    handleBtnClick: function(e) { 
    e.preventDefault(); 
    alert("clicked!"); 
    return true; 
    }, 

    render: function() { 
    return <div > 
     <form> 
     < button className = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-textfield--full-width mdl-button--facebook" 
      onClick = { 
      this.handleBtnClick 
      } > 
      Click MEEEEEE! 
     </button> </form> </div>; 
    } 
    }); 

    ReactDOM.render(< Widget/> , 
    document.getElementById('container') 
); 
+0

當我使用'mdl-js-layout'時,我發現它不工作 –

+0

yes ..看看react-mdl項目來解決這個問題。 –

+0

這可能就像在這種情況下在螞蟻山上投擲原子彈一樣,但是反應和mdl正在迅速地從具有大量資源的公司發展出框架,所以希望react-mdl項目成爲產生不兼容問題的集合點。 –