React绑定事件动态化的实现方法
一、什么是绑定事件
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}
/>
React绑定事件动态化的实现方法的更多相关文章
- Jquery动态添加的元素绑定事件的3种方法
假设我们点击li标签,弹出他的文本,如果是动态添加的li,点击是没有效果的,压根弹不出来文本. 下面博主分享一下为动态添加的元素绑定事件的三种方法,网上一般都是两种,我在这里多增加了一种. 事件案例: ...
- 一、winForm-DataGridView操作——控件绑定事件的两种方法
在winForm窗体中绑定(注册)事件的方法有两种: 一.绑定事件 双击控件,即进入.cs的代码编辑页面,会出现 类似于“ private void 控件名称_Click(object sender, ...
- jq给动态生成的标签绑定事件的几种方法
经常遇到给动态生成的标签绑定事件不好用,自己简单测试总结了下,结论如下了: body> <!-- 下面是用纯动态方式生成标签 --> <div id="d2" ...
- jQuery中绑定事件的几种方法
以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){}); (2)target.bind("click",functi ...
- 用jQuery来绑定事件的3种方法和区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery 动态创建的元素,绑定事件无效之解决方法
今天遇到一个问题,动态创建的元素,绑定事件无效,如下: js 代码如下: var OaddX = $('.detright div.duibi div.duibox ul li span'); // ...
- react绑定事件的几种写法
方法一:最麻烦的写法,不推荐 import React from 'react'; class App extends React.Component { handleClick() { alert( ...
- 【 React - 1/100 】React绑定事件this指向问题--改变state中的值
/** * 报错: * Cannot read property 'setState' of undefined * 原因: this指向不一致.btnAddCount中的this 和render中的 ...
- jquery绑定事件的系统参数传递方法
如果是传递的事件自带函数,,可使用以下语法(以鼠标移动事件为例): init: function () { $(document).on("mousemove",loginOper ...
随机推荐
- MVC模式、加密、jsonwebtoken
一.MVC模式(架构思想) M:model层,主要是数据的增删改查 V:view层,主要是视图的展示 C:controller层,主要负责业务逻辑 二.加密(md5加密.sha256加密)1.sha2 ...
- eclipse 出现内存溢出问题解决办法
1.eclipse.ini添加设置: -vm#eclipse启动使用的jdk设置,路径根据自己实际路径修改 C:/Program Files/Java/jdk1.6.0_45/bin/javaw.ex ...
- svn钩子
#!/bin/sh #修改为服务编码 export.UTF-8 #Set variable REPOS="$1" REV="$2" #svn安装脚本目录 SVN ...
- script 跳出小窗口
sss
- win10常见问题处理办法
1.当笔记本连接wifi时,提示,无internet,安全,而手机能正常连接wifi时: cmd(需管理员权限)执行命令 netsh winsock reset 出现已重置,重启电脑 解决方法 2.当 ...
- TNS-12537,TNS-12560,TNS-00507 Linux Error: 29: Illegal seek解决
下午有个测试环境测试人员反馈oracle监听起不来,一启动就报错,还生成了core文件.如下: [oracle@localhost ~]$ lsnrctl start LSNRCTL for Linu ...
- Java并发编程73道面试题及答案 —— 面试稳了
今天主要整理一下 Java 并发编程在面试中的常见问题,希望对需要的读者有用. 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任 ...
- 第三周作业HAproxy文件操作
#coding:utf-8 #Author:Mr Zhi """ HAproxy配置文件操作: 1. 根据用户输入输出对应的backend下的server信息 2. 可添 ...
- 在Linux系统上卸载playOnLinux
1.remove just the playonlinux package itself. sudo apt-get remove playonlinux 2.remove the playonlin ...
- ImageView控件有关问题
了解了一下ImageView控件,这个控件本身及其属性倒没有什么特别之处.只是在看<第一行代码>时,郭大神写到创建drawable-xhdpi文件有些问题,首先先说drawable和mip ...