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 相关文章推荐
jquery插件开发注意事项小结
Jun 04 Javascript
script不刷新页面的联动前后代码
Sep 18 Javascript
Javascript变量作用域详解
Dec 06 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
基于JavaScript怎么实现让歌词滚动播放
Nov 03 Javascript
javascript实现uploadify上传格式以及个数限制
Nov 23 Javascript
jQuery源码分析之sizzle选择器详解
Feb 13 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
Aug 28 Javascript
js中call()和apply()改变指针问题的讲解
Jan 17 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 Javascript
JavaScript事件循环及宏任务微任务原理解析
Sep 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
详解PHP PDO简单教程
2019/05/28 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
工作自我评价分享
2013/12/01 职场文书
公司承诺书怎么写
2014/05/24 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
爱心捐款感谢信
2015/01/20 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
vue自定义右键菜单之全局实现
2022/04/09 Vue.js