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 相关文章推荐
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
Sep 07 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
Sep 03 Javascript
js仿微博实现统计字符和本地存储功能
Dec 22 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
Apr 07 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 Javascript
JS搜狐面试题分析
Dec 16 Javascript
layui前段框架日期控件使用方法详解
May 19 Javascript
angularJs中json数据转换与本地存储的实例
Oct 08 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
LayUI动态设置checkbox不显示的解决方法
Sep 02 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
Sep 03 Javascript
layui插件表单验证提交触发提交的例子
Sep 09 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
ECMAScript 基础知识
2007/06/29 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
js实现分割上传大文件
2016/03/09 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
详解python中的 is 操作符
2017/12/26 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
基于Python fminunc 的替代方法
2020/02/29 Python
python如何运行js语句
2020/09/09 Python
用python发送微信消息
2020/12/21 Python
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
专科毕业生自我鉴定
2013/12/01 职场文书
借款担保书范文
2014/05/13 职场文书
学风建设演讲稿
2014/09/12 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
Win11查看设备管理器
2022/04/19 数码科技