一、什么是绑定事件

1.1 事件

我这里指的事件一般指的是React自带的触发事件,我这里先简单举例几个

  1. onClick //鼠标点击
  2. onMouseEnter //鼠标滑进
  3. onMouseLeave //鼠标滑出

1.2 绑定事件

一般有三种绑定事件的方法:

  1. /*
  2. * 1. constructor函数里统一bind
  3. */
  4. constructor(arg){
  5. super(arg)
  6. this.handleChange = this.handleChange.bind(this)
  7. //...
  8. }
  9. <input onChange={this.handleChange} />
  10. /*
  11. * 2. 箭头函数
  12. */
  13. //2.1 方式1
  14. handleChange(){
  15. //xxx
  16. }
  17. <input onChange={ () => this.handleChange()} />
  18. //2.2 方式2
  19. handleChange = () => {
  20. //xxx
  21. }
  22. <input onChange={this.handleChange} />
  23. /*
  24. * 3. 属性内绑定
  25. */
  26. handleChange(){
  27. //xxx
  28. }
  29. <input onChange={this.handleChange.bind(this)} />

如果想要详细地了解这几种React绑定事件的区别及如何选择,可以看我这篇文章:

《每日质量NPM包事件绑定_bindme(详解React的this)》

二、动态化

2.1 什么是动态化

动态化在我理解里就是具有可控性,能节省代码空间.比如ES6常用字符串模板就是实现动态化的一种方式

举个栗子:

如果我想输出3个数据('mock1', 'mock2', 'mock3').

  1. console.log('mock1')
  2. console.log('mock2')
  3. console.log('mock3')
  1. let arr = ['mock1', 'mock2', 'mock3']
  2. arr.map( item => {
  3. console.log(`动态输出${item}`)
  4. })

当然,这个例子动态化的作用并不明显,我们直接看react事件动态化例子吧

2.2 React事件动态化

前面介绍了react的事件绑定方法。虽然在普通react语法中,我们不经常涉及到事件动态化,但是像一个渲染类的组件中(例如antd table等等),就会经常使用的了

还是栗子: 我要拥有三个除了绑定事件以外其余一模一样的button。分别绑定saverestartdelete事件.我们一般会这么写

  1. <button onClick={ () => this.handleSave() }>保存</button>
  2. <button onClick={ () => this.handleRestart() }>重启</button>
  3. <button onClick={ () => this.handleDelete() }>删除</button>

这么写当然没问题,但是一来代码比较多,不美观.二来遇到antd table这类render属性的,写这么多容易混乱,所以休整一下,如下:

  1. const action = {
  2. 'Save': '保存',
  3. 'Stop': '停止实例',
  4. 'Restart': '重启实例'
  5. }
  6. {
  7. Object.keys(action).map( item => (
  8. <button key={item} onClick={ () => this[`handle${item}`]() } >{action[item]}</button>
  9. ))
  10. }

界面丑是丑了一点,但是非常实用呀!

比如antd的table

  1. let columns = [{
  2. title: '操作',
  3. dataIndex: 'action',
  4. key: 'action',
  5. render: action => (
  6. <span>
  7. {
  8. Object.keys(action).map( item => <span
  9. key={item}
  10. onClick={ () => this[`handle${item}`]() }>{action[item]}</span>)
  11. }
  12. </span>
  13. )
  14. }]
  15. let datalist = [action: {
  16. 'Save': '保存',
  17. 'Stop': '停止实例',
  18. 'Restart': '重启实例'
  19. }]
  20. <Table
  21. columns={columns}
  22. dataSource={datalist}
  23. />

React绑定事件动态化的实现方法的更多相关文章

  1. Jquery动态添加的元素绑定事件的3种方法

    假设我们点击li标签,弹出他的文本,如果是动态添加的li,点击是没有效果的,压根弹不出来文本. 下面博主分享一下为动态添加的元素绑定事件的三种方法,网上一般都是两种,我在这里多增加了一种. 事件案例: ...

  2. 一、winForm-DataGridView操作——控件绑定事件的两种方法

    在winForm窗体中绑定(注册)事件的方法有两种: 一.绑定事件 双击控件,即进入.cs的代码编辑页面,会出现 类似于“ private void 控件名称_Click(object sender, ...

  3. jq给动态生成的标签绑定事件的几种方法

    经常遇到给动态生成的标签绑定事件不好用,自己简单测试总结了下,结论如下了: body> <!-- 下面是用纯动态方式生成标签 --> <div id="d2" ...

  4. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  5. 用jQuery来绑定事件的3种方法和区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. jquery 动态创建的元素,绑定事件无效之解决方法

    今天遇到一个问题,动态创建的元素,绑定事件无效,如下: js 代码如下: var OaddX = $('.detright div.duibi div.duibox ul li span'); // ...

  7. react绑定事件的几种写法

    方法一:最麻烦的写法,不推荐 import React from 'react'; class App extends React.Component { handleClick() { alert( ...

  8. 【 React - 1/100 】React绑定事件this指向问题--改变state中的值

    /** * 报错: * Cannot read property 'setState' of undefined * 原因: this指向不一致.btnAddCount中的this 和render中的 ...

  9. jquery绑定事件的系统参数传递方法

    如果是传递的事件自带函数,,可使用以下语法(以鼠标移动事件为例): init: function () { $(document).on("mousemove",loginOper ...

随机推荐

  1. Codeforce 835B - The number on the board (贪心)

    Some natural number was written on the board. Its sum of digits was not less than k. But you were di ...

  2. linux学习---ps、kill

    一.ps       查看进程 ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的:如果想对进程时间监控,应该用 top 工具 linux上进程有5种状态: 1. 运行(正在运行或 ...

  3. 如何使用Wisdom RESTClient定制满足您个性化需求的API文档?

    Wisdom RESTClient 支持自动化测试RESTful API,输出精美的测试报告,生成精美的RESTful API文档. 这里介绍一下如何定制个性化的RESTful API文档. 定制个性 ...

  4. intelliJ IDEA之使用svn或git管理代码

    intelliJ IDEA之使用svn管理代码 1.VCS—>import into Version Control—>Share Project(Subversion) 2.点击+    ...

  5. 基于SecureCRT的测试环境的克隆的linux/vi相关命令

    #chmod -R 777*; 参数-R:对当前目录下的所有档案与子目录进行相同的权限 变更(即以递归的方式逐个变更). *:通配符,指的是当前目录下的所有文件及目录. 所有文件及其子目录的文件拥有者 ...

  6. MySQL笔记(八)存储过程练习&补充

    存储过程有什么优缺点?为什么要用存储过程?或者在什么情况下才用存储过程? 最直白的好处是存储过程比较快. 1.利用存储过程,给Employee表添加一条业务部门员工的信息. DROP PROCEDUR ...

  7. Prometheus监控学习笔记之prometheus的federation机制

    0x00 概述 有时候对于一个公司,k8s集群或是所谓的caas只是整个技术体系的一部分,往往这个时候监控系统不仅仅要k8s集群以及k8s中部署的应用,而且要监控传统部署的项目.也就是说整个监控系统不 ...

  8. P3203 [HNOI2010]弹飞绵羊(LCT)

    P3203 [HNOI2010]弹飞绵羊 LCT板子 用一个$p[i]$数组维护每个点指向的下个点. 每次修改时cut*1+link*1就解决了 被弹出界时新设一个点,权为0,作为终点表示出界点.其他 ...

  9. golang json用法讲解

    简介 json格式可以算我们日常最常用的序列化格式之一了,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好.但是Go语言是个强类型语言,对格式要求极其严格而J ...

  10. spring boot @Scheduled未生效原因以及相关坑、及相对其他定时任务架构的优势

    在spring boot中,支持多种定时执行模式(cron, fixRate, fixDelay),在Application或者其他Autoconfig上增加@EnableScheduling注解开启 ...