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 相关文章推荐
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
js滚动条平滑移动示例代码
Mar 29 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 Javascript
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
May 26 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
Aug 28 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
JS异步处理的进化史深入讲解
Aug 25 Javascript
让IDE识别webpack的别名alias的实现方法
May 06 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
最新教师自我评价分享
2013/11/12 职场文书
医药销售自荐书
2014/05/29 职场文书
重点工程汇报材料
2014/08/27 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
收入证明怎么写
2015/06/12 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
初中数学教学反思范文
2016/02/17 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
React中的Context应用场景分析
2021/06/11 Javascript
PHP正则表达式之RCEService回溯
2022/04/11 PHP