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引用对象的方法
Jan 11 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
Nov 07 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
Sep 09 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
Node.js使用Express.Router的方法
Nov 14 Javascript
Node.js利用console输出日志文件的方法示例
Apr 27 Javascript
JS数据类型分类及常用判断方法
Nov 19 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
如何将JavaScript将数组转为树形结构
Jun 02 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
星际争霸任务指南——人族
2020/03/04 星际争霸
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
js实现图片轮换效果代码
2013/04/16 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python内置函数OCT详解
2016/11/09 Python
浅析Git版本控制器使用
2017/12/10 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python实现机器人卡牌
2019/10/06 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
python3中布局背景颜色代码分析
2020/12/01 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
三分钟演讲稿范文
2014/04/24 职场文书
教师听课评语大全
2014/12/31 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
Django显示可视化图表的实践
2021/05/10 Python
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
Java存储没有重复元素的数组
2022/04/29 Java/Android