- React事件綁定屬性的命名採用駝峯寫法,不一樣於傳統DOM所有小寫。
- 若是採用JSX的語法,事件函數須要用大括號
{}
包裹函數名,不一樣於傳統DOM字符串小括號的方式。
<button onClick={ activateLasers }> Activate Lasers </button>
- 在React中另外一個不一樣是你不能使用返回
false
的方式阻止默認行爲,必須明確使用preventDefault
來阻止。
function handleClick() { e.preventDefault(); console.log('The link was clicked.'); } return ( <a href="#" onClick={ handleClick }> CLICK ME </a> );
React一般在元素初始渲染的時候提供一個事件,而後綁定給元素便可:react
class Toggle extends React.Component { constructor(props) { super(props); this.state = { isToggleOn: true }; this.handleClick = this.handleClick.bind(this); } handleClick() { this.setState(prevState => ({ isToggleOn: !prevState.isToggleOn })); } render() { return ( <button onClick={ this.handleClick }> { this.state.isToggleOn ? 'ON' : 'OFF' } </button> ); } } ReactDOM.render( <Toggle />, document.querySelector('#root') );
注意這裏使用了bind
方法來指向this
爲當前類的實例。若是不想使用bind
能夠使用【屬性初始化器】來解決。函數
class Toggle extends React.Component { constructor(props) { super(props); this.state = { isToggleOn: true }; // this.handleClick = this.handleClick.bind(this); } // 這裏使用了箭頭函數 // React文檔稱爲【屬性初始化器】 // React文檔推薦使用這兩種方式 handleClick = () => { this.setState(prevState => ({ isToggleOn: !prevState.isToggleOn })); } render() { ... } } ReactDOM.render( <Toggle />, document.querySelector('#root') );
還能夠在回調函數中使用箭頭函數(這樣作可能有性能問題):性能
若是這個回調函數做爲一個屬性值傳入低階組件,這些組件可能會進行額外的從新渲染。學習
class Toggle extends React.Component { constructor(props) { ... } handleClick() { ... } render() { // 這裏使用了箭頭函數 return ( <button onClick={ e => this.handleClick(e) }> { this.state.isToggleOn ? 'ON' : 'OFF' } </button> ); } } ReactDOM.render( <Toggle />, document.querySelector('#root') );
兩種方式:this
<button onClick={ e => this.deleteRow(id, e) }>Delete Row</button>
<button onClick={ this.deleteRow.bind(this, id) }>Delete Row</button>
經過箭頭函數傳遞的參數就是方法被調用寫得順序入參。
而bind方法傳遞的參數,總體排在e
事件對象前面:google
class Popper extends React.Component { constructor() { super(); this.state = { name: 'Hello world!', id: '001' }; } preventPop(id, name, e) { e.preventDefault(); alert(id + ': ' + name); } render() { return ( <div> <p>Pass Params</p> { /* Pass params via bind() method. */ } <a href="https://google.com" onClick={ this.preventPop.bind(this, this.state.id, this.state.name) }>Click Me</a> </div> ); } } ReactDOM.render( <Popper />, document.querySelector('#root') );
運行效果:code
The end... Last updated by: Jehorn, April 15, 2019, 6:30 PM對象