在学习React的Hadding Events这一章节,发现事件回调函数的几种写法,看似区别不大,但实际差异还是蛮大的。

  1. class Toggle extends React.Component{
  2. constructor(props) {
  3. super(props);
  4.  
  5. this.state = {isToggleOn:false};
  6.  
  7. //necessary
  8. this.bindClick = this.bindClick.bind(this);//推荐写法
  9. };
  10.  
  11. bindClick(){
  12. this.setState(
  13. prevState => ({
  14. isToggleOn : !prevState.isToggleOn
  15. })
  16. )
  17. };
  18.  
  19. render() {
  20. return (
  21. // <button onClick={(e) => this.bindClick(e)}> //这种写法导致每次呈现组件都要创建一个回调方法,浪费性能
  22.  
  23. <button onClick={this.bindClick}>
  24. {this.state.isToggleOn ? "ON" : "OFF"}
  25. </button>
  26. )
  27. };
  28. }
  29.  
  30. ReactDOM.render(<Toggle /> ,document.getElementById("example"))

通常使用推荐写法

2、列表中的key

在React中,列表中的key很关键,虽然不是必需的,但是

Keys help React identify which items have changed, are added, or are removed. Keys should be given to the elements inside the array to give the elements a stable identity

并且如果封装一个列表组件,key最好赋给封装组件,而非原始列表,

key不会作为组件的props传递

如下:key赋给ListItem而非li

  1. function ListItem(props) {
  2. const value = props.value;
  3. return (
  4. // Wrong! There is no need to specify the key here:
  5. <li key={value.toString()}>
  6. {value}
  7. </li>
  8. );
  9. }
  10.  
  11. function NumberList(props) {
  12. const numbers = props.numbers;
  13. const listItems = numbers.map((number) =>
  14. // Wrong! The key should have been specified here:
  15. <ListItem value={number} />
  16. );
  17. return (
  18. <ul>
  19. {listItems}
  20. </ul>
  21. );
  22. }
  23.  
  24. const numbers = [1, 2, 3, 4, 5];
  25. ReactDOM.render(
  26. <NumberList numbers={numbers} />,
  27. document.getElementById('root')
  28. );

React之事件绑定、列表中key的使用的更多相关文章

  1. React 点击删除列表中对应项(React 获取DOM中自定义属性)

    点击删除按钮,删除列表中对应项本来是React比较基础的应用,可是应用情况变得复杂了以后,我还真想了一会儿才搞定. 简化一下应用场景:点击新增按钮,增加一条输入框,点击输入框旁边的按钮,删除该输入框( ...

  2. jquery事件函数和原生事件绑定函数中return false的区别

    一直听说jquery中事件函数返回false,相当于调用了event.preventDefault()和event.stopPropagation()两个方法,今天就想看看dom中0级.1级.2级事件 ...

  3. 如何合并列表中key相同的字典?

    现有list: list1 = [{a: 123}, {a: 456},{b: 789}] 合并成: list2 = [{a: [123,456]},{b: [789]}] from collecti ...

  4. JS中事件绑定函数,事件捕获,事件冒泡

    1 事件绑定:事件与函数绑定以及怎么取消绑定 1.1 元素.onclick这种形式,如下: <div id="div1">aaa</div> <scr ...

  5. vuejs学习笔记(1)--属性,事件绑定,ajax

    属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, ...

  6. vuejs学习笔记(2)--属性,事件绑定,ajax

    属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, ...

  7. jQuery 事件绑定 和 JavaScript 原生事件绑定

    总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...

  8. React中,input外边如果包一个div,可以把input的onChange事件绑定到div上面,并且也生效

    最近第一次开始学习封装组件,遇到几个比较神奇的问题. 首先就是如果input外边包一个div,如果把input的onChange事件绑定到div上,也会生效 <div onChange={(e) ...

  9. jQuery中事件绑定到bind、live、delegate、on方法的探究

    1. 给页面上的某个元素绑定事件,最初采用下面的方式实现: $(‘selector’).click(function(){ //code }); 缺点: 不能同时绑定多个事件,不能绑定动态的元素. 后 ...

随机推荐

  1. Java 集合 - HashSet

    一.源码解析 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable ...

  2. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

    原文地址:http://linuxme.blog.51cto.com/1850814/375752 今天将阿里云服务器更换了一下系统盘,重启成功后,再次通过终端访问阿里云的公网IP报以下信息: @@@ ...

  3. 关于MySQL中的三种日期类型

    Mysql中我们经常用来存储日期的数据类型有三种:Date.Datetime.Timestamp. Date数据类型用来存储没有时间的日期.Mysql获取和显示这个类型的格式为"YYYY-M ...

  4. 第一次写Web API接口

    API是什么?只知道是网络接口,具体怎么写?不会!如何调用?不会!那怎么办? 第一次的经历~~ 需求:为其他项目提供一个接口 功能:为项目提供询盘信息和商家信息,格式为Json字符串 拿过来,就开始做 ...

  5. android 实现类似qq未读消息点击循环显示

    public void jumpUnread(boolean cycle) { List<ContactLogModel> dataList = adapter.getContactLog ...

  6. c#winform程序退出的方法

    一共有4种方式: 1.this.Close();  只是关闭当前窗口,若不是主窗体,无法退出程序,另外若有托管线程(非主线程),也无法干净的退出: 2.Application.Exit();强制所有消 ...

  7. SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子

    很早就知道SQL SERVER自带的报表工具SSRS,但一直没有用过,最近终于需要在工作中一展身手了,于是我特地按照自己的理解做了以下总结: 1. 安装软件结构 SSRS全称SQL Server Re ...

  8. java 反编译

    JavaDecompiler http://jd.benow.ca/jd-eclipse/update/

  9. http响应需要记住的状态码

    200:请求成功. 301:被请求的资源已永久移动到新位置.302:请求的资源现在临时从不同的 URI 响应请求.401:当前请求需要用户验证.403:服务器已经理解请求,但是拒绝执行它. 404:请 ...

  10. linux笔记:shell编程-文本处理命令

    cut(字段提取命令,也叫列提取命令): printf(格式化输出命令): awk(awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理): sed(sed是一个很好 ...