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 Sort 表格排序
Oct 31 Javascript
我的javascript 函数链之演变
Apr 07 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
Aug 10 Javascript
jQuery标签替换函数replaceWith()的使用例子
Aug 28 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
May 10 Javascript
js本地图片预览实现代码
Oct 09 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
Oct 25 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
Jun 19 Javascript
angular4中引入echarts的方法示例
Jan 29 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实现读取和编写XML DOM代码
2010/04/07 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
python数据结构之链表详解
2017/09/12 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python读文件的步骤
2019/10/08 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
构造方法和其他方法的区别
2016/04/26 面试题
平面设计岗位职责
2013/12/14 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
netty 实现tomcat的示例代码
2022/06/05 Servers