react实现pure render时bind(this)隐患需注意!

发布时间 - 2026-01-11 00:05:19    点击率:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# react  # pure  # render  # bind  # React 组件中的 bind(this)示例代码  # Modal.confirm是否违反了React模式分析  # react中关于函数调用()与bind this的原因及分析  # 我就  # 也不  # 我和  # 说了  # 都没  # 不多  # 两次  # 你想  # 写着  # 一个问题  # 你用  # 上我  # 还必须  # 来啊  # 前传  # 大家多多  # 往常  # 用着  # pre  # class 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel如何使用Service Container和依赖注入?(代码示例)  智能起名网站制作软件有哪些,制作logo的软件?  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  大同网页,大同瑞慈医院官网?  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何用花生壳三步快速搭建专属网站?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  EditPlus中的正则表达式实战(5)  个人网站制作流程图片大全,个人网站如何注销?  创业网站制作流程,创业网站可靠吗?  如何自定义建站之星模板颜色并下载新样式?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  活动邀请函制作网站有哪些,活动邀请函文案?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  C#如何调用原生C++ COM对象详解  微信公众帐号开发教程之图文消息全攻略  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Python文本处理实践_日志清洗解析【指导】  怎样使用JSON进行数据交换_它有什么限制  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  利用JavaScript实现拖拽改变元素大小  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何挑选优质建站一级代理提升网站排名?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  如何快速搭建高效简练网站?  如何将凡科建站内容保存为本地文件?  如何在IIS7上新建站点并设置安全权限?  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何在IIS中新建站点并配置端口与IP地址?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Python文件异常处理策略_健壮性说明【指导】