react实现pure render时bind(this)隐患需注意!


Posted in Javascript onMarch 09, 2017

pure render 我就不多说了,附上我另一片文章链接 react如何性能达到最大化(前传)

不论你用不用immutable,只要你想达到pure render,下面值得你注意!

一天我和往常一样,开开心心得写着react,用着@pureRender,

export default class extends Component {
...
 render() {
  const {name,age} =this.state;
  return (
   <div>
    <Person name={name} age={age} onClick={this._handleClick.bind(this)}></Person>//bug 所在
   </div>
  )
 }
...
}

发现一个问题,对于Person这个子组件来说,在父组件re-render的时候,即使Person得前后两个props都没改变,它依旧会re-render,即使用immutable.js也不好使。

原来啊,父组件每次render,_handleClick都会执行bind(this) 这样_handleClick的引用每次都会改,所以Person前后两次props其实是不一样的。

那怎么办?把bind(this)去掉?不行 还必须得用

真正的答案是 让父组件每次render 不执行bind(this),直接提前在constructor执行好,修改之后

export default class extends Component {
 constructor(props){
  super(props)
  this._handleClick=this._handleClick.bind(this)//改成这样
 }
 render() {
  const {name,age} =this.state;
  return (
   <div>
    <Person name={name} age={age} onClick={this._handleClick}></Person>
   </div>
  )
 }
...
}

参考:React.js pure render performance anti-pattern

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript知识点收藏
Feb 22 Javascript
jQuery 插件开发指南
Nov 14 Javascript
javascript实现3D切换焦点图
Oct 16 Javascript
如何利用模板将HTML从JavaScript中抽离
Oct 08 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
如何让你的JS代码更好看易读
Dec 01 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
May 17 Javascript
实现Vue的markdown文档可以在线运行的方法示例
Dec 11 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 #Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 #Javascript
微信小程序 合法域名校验出错详解及解决办法
Mar 09 #Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
Mar 09 #Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
Mar 09 #Javascript
js实现时间轴自动排列效果
Mar 09 #Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 #Javascript
You might like
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
python清除指定目录内所有文件中script的方法
2015/06/30 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
职专应届生求职信
2013/11/16 职场文书
社区工作者思想汇报
2014/01/13 职场文书
中国好声音华少广告词
2014/03/17 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
新文化运动的基本口号
2014/06/21 职场文书
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python