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 相关文章推荐
dojo 之基础篇(二)之从服务器读取数据
Mar 24 Javascript
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
javascript 保存文件到本地实现方法
Nov 29 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
Jun 05 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
js获取上传文件大小示例代码
Apr 10 Javascript
js封装可使用的构造函数继承用法分析
Jan 28 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
Feb 27 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
Feb 06 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
原生JS实现简单的倒计时功能示例
Aug 30 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
很实用的一个完整email发送程序
2006/10/09 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
JavaScript this 深入理解
2009/07/30 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
详解vue高级特性
2020/06/09 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python如何判断数独是否合法
2016/09/08 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
Python高级用法总结
2018/05/26 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
成教自我鉴定
2013/10/27 职场文书
单位委托函范文
2015/01/29 职场文书
兵马俑导游词
2015/02/02 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
图文详解nginx日志切割的实现
2022/01/18 Servers