一、什么是綁定事件
1.1 事件
我這里指的事件一般指的是React自帶的觸發事件,我這里先簡單舉例幾個
onClick //鼠標點擊
onMouseEnter //鼠標滑進
onMouseLeave //鼠標滑出
1.2 綁定事件
一般有三種綁定事件的方法:
/*
* 1. constructor函數里統一bind
*/
constructor(arg){
super(arg)
this.handleChange = this.handleChange.bind(this)
//...
}
<input onChange={this.handleChange} />
/*
* 2. 箭頭函數
*/
//2.1 方式1
handleChange(){
//xxx
}
<input onChange={ () => this.handleChange()} />
//2.2 方式2
handleChange = () => {
//xxx
}
<input onChange={this.handleChange} />
/*
* 3. 屬性內綁定
*/
handleChange(){
//xxx
}
<input onChange={this.handleChange.bind(this)} />
如果想要詳細地了解這幾種React綁定事件的區別及如何選擇,可以看我這篇文章:
《每日質量NPM包事件綁定_bindme(詳解React的this)》
二、動態化
2.1 什么是動態化
動態化在我理解里就是具有可控性,能節省代碼空間.比如ES6常用字符串模板就是實現動態化的一種方式
舉個栗子:
如果我想輸出3個數據('mock1', 'mock2', 'mock3').
console.log('mock1')
console.log('mock2')
console.log('mock3')
let arr = ['mock1', 'mock2', 'mock3']
arr.map( item => {
console.log(`動態輸出${item}`)
})
當然,這個例子動態化的作用並不明顯,我們直接看react事件動態化例子吧
2.2 React事件動態化
前面介紹了react的事件綁定方法。雖然在普通react語法中,我們不經常涉及到事件動態化,但是像一個渲染類的組件中(例如antd table等等),就會經常使用的了
還是栗子: 我要擁有三個除了綁定事件以外其余一模一樣的button。分別綁定save、restart、delete事件.我們一般會這么寫
<button onClick={ () => this.handleSave() }>保存</button>
<button onClick={ () => this.handleRestart() }>重啟</button>
<button onClick={ () => this.handleDelete() }>刪除</button>
這么寫當然沒問題,但是一來代碼比較多,不美觀.二來遇到antd table這類render屬性的,寫這么多容易混亂,所以休整一下,如下:
const action = {
'Save': '保存',
'Stop': '停止實例',
'Restart': '重啟實例'
}
{
Object.keys(action).map( item => (
<button key={item} onClick={ () => this[`handle${item}`]() } >{action[item]}</button>
))
}

界面丑是丑了一點,但是非常實用呀!
比如antd的table
let columns = [{
title: '操作',
dataIndex: 'action',
key: 'action',
render: action => (
<span>
{
Object.keys(action).map( item => <span
key={item}
onClick={ () => this[`handle${item}`]() }>{action[item]}</span>)
}
</span>
)
}]
let datalist = [action: {
'Save': '保存',
'Stop': '停止實例',
'Restart': '重啟實例'
}]
<Table
columns={columns}
dataSource={datalist}
/>
