2016-03-27 15 views
7

Ho alcuni JS come di seguito. Trovo che se rimuovo mdl-js-layout il pulsante onClick funziona. Altrimenti fallisce. Perché potrebbe essere? Ho già fatto componentHandler.upgradeDom()ReactJS e Google MDL Button onClick non funziona

'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> 
    ); 
    } 
}); 

Se guardo negli strumenti Reagire debugger, posso effettivamente vedere l'onClick dovrebbe essere vincolato?

enter image description here

+0

https://github.com/tleunen/react-mdl/issues/254 - potrebbe risultare utile; Assicurati che il gestore di clic sia una chiusura con l'oggetto "questo" corretto. –

risposta

1

Sembra mdl non è compatibile con la reazione, e previene gli eventi click dal componente reagire da lavorare. Si spera che ciò possa essere risolto in un aggiornamento futuro, ma fino ad allora, è possibile aggirare questo problema aggiungendo manualmente gli eventi dopo aver montato il componente.

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

Demo

+0

Agreed React utilizza il template dinamico quindi è necessario aggiornare l'elemento. C'è anche un progetto react-mdl che gestisce alcuni altri problemi. Secondo http://dragablz.net/2015/07/14/react-js-and-material-design-lite/, componentHandler.upgradeElement() potrebbe essere un po 'più leggero di upgradeDom(). Spero che sia d'aiuto. –

1

Speriamo this risponde alla tua domanda: Con le risorse utilizzate a quanto pare non ha bisogno di toccare il 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

Trovo che non funzioni quando 'mdl-js-layout' è usato –

+0

si .. guarda il progetto react-mdl per affrontarlo. –

+0

è forse come lanciare una bomba atomica su un formicaio in questo caso, ma reagire e mdl sono quadri in rapida evoluzione da aziende con vaste risorse, quindi si spera che il progetto react-mdl funga da punto di raccolta per le incompatibilità che si presentano. –

Problemi correlati