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 18 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
js检测iframe是否加载完成的方法
Nov 26 Javascript
JavaScript数组的5种迭代方法
Sep 29 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
django中使用vue.js的要点总结
Jul 07 Javascript
layer父页获取弹出层输入框里面的值方法
Sep 02 Javascript
vue项目强制清除页面缓存的例子
Nov 06 Javascript
Vue路由管理器Vue-router的使用方法详解
Feb 05 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
桌面中心(一)创建数据库
2006/10/09 PHP
域名查询代码公布
2006/10/09 PHP
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
js实现字符全排列算法的简单方法
2017/05/01 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
python中对list去重的多种方法
2014/09/18 Python
在Python的循环体中使用else语句的方法
2015/03/30 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python在文本开头插入一行的实例
2018/05/02 Python
一看就懂得Python的math模块
2018/10/21 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
django model通过字典更新数据实例
2020/04/01 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
优秀班主任经验交流材料
2014/06/02 职场文书
经典毕业生求职信
2014/07/12 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
热爱劳动主题班会
2015/08/14 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
MongoDB支持的数据类型
2022/04/11 MongoDB