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 表单规则集合对象
Jul 21 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
js中this用法实例详解
May 05 Javascript
jQuery时间轴插件使用详解
Jul 16 Javascript
基于jQuery实现响应式圆形图片轮播特效
Nov 25 Javascript
jQuery动态生成不规则表格(前后端)
Feb 21 Javascript
html5+canvas实现支持触屏的签名插件教程
May 08 Javascript
微信小程序联网请求的轮播图
Jul 07 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 Javascript
详解vue-router的导航钩子(导航守卫)
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
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python安装第三方库的3种方法
2015/06/21 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
小学语文教学反思
2014/02/10 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
Golang 字符串的常见操作
2022/04/19 Golang