### 不要在render的函数中绑定值

假设你有一个项目列表,每个项目都传递一个唯一的参数到父方法。为了绑定参数,你可能会这么做:

```

this.likeComment(user.id)} />

```

这个问题会导致每次父组件render方法被调用时,一个新的函数被创建,已将其传入likeComment。这会有一个改变每个子组件props的副作用,它将会造成他们全部重新渲染,即使数据本身没有发生变化。

为了解决这个问题,只需要将父组件的原型方法的引用传递给子组件。子组件的likeComment属性将总是有相同的引用,这样就不会造成不必要的重新渲染。

```

```

然后再子组件中创建一个引用了传入属性的类方法:

```

class CommentItem extends PureComponent {

...

handleLike() {

this.props.likeComment(this.props.userID)

}

...

}

```

### 不要在render方法里派生数据

考虑一下你的配置组件将从一系列文章中展示用户最喜欢的十篇文章

```

render() {

const { posts } = this.props

const topTen = posts.sort((a, b) => b.likes - a.likes).slice(0, 9)

return //...

}

```

每次组件重新渲染时topTen都将有一个新的引用,即使posts没有改变并且派生数据也是相同的。这将造成列表不必要的重新渲染。

你可以通过缓存你的派生数据来解决这个问题。例如,设置派生数据在你的组件state中,仅当posts更新时它才更新。

```

componentWillMount() {

this.setTopTenPosts(this.props.posts)

}

componentWillReceiveProps(nextProps) {

if (this.props.posts !== nextProps.posts) {

this.setTopTenPosts(nextProps)

}

}

setTopTenPosts(posts) {

this.setState({

topTen: posts.sort((a, b) => b.likes - a.likes).slice(0, 9)

})

}

```

如果你正在使用Redux,可以考虑使用reselect来创建"selectors"来组合和缓存派生数据。

大学生html个人博客,个人博客分享相关推荐

  1. ​kdevelop用法_weixin_44594953的博客-CSDN博客_kdevelop​

    kdevelop用法_weixin_44594953的博客-CSDN博客_kdevelop

  2. 【无标题】ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁

    ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁

  3. 怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新

    怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新

  4. Kdevelop的简单使用和调试_JunJun~的博客-CSDN博客_kdevelop使用教程

    Kdevelop的简单使用和调试_JunJun~的博客-CSDN博客_kdevelop使用教程

  5. cmake使用示例与整理总结_QTVLC的博客-CSDN博客_cmake使用示例与整理 施公队演示时用的blog B zhan

    cmake使用示例与整理总结_QTVLC的博客-CSDN博客_cmake使用示例与整理

  6. add-apt-repository命令详解_Dcr_Hs的博客-CSDN博客_add-apt-repository

    add-apt-repository命令详解_Dcr_Hs的博客-CSDN博客_add-apt-repository

  7. Ubuntu安装Ceres库-安装依赖时报错:E:无法定位软件包 libcxsparse3.1.2_朱国鑫的博客-CSDN博客

    Ubuntu安装Ceres库-安装依赖时报错:E:无法定位软件包 libcxsparse3.1.2_朱国鑫的博客-CSDN博客

  8. Ubuntu18.04安装g2o,及问题解决_HyperZhu的博客-CSDN博客_ubuntu18.04安装g2o

    Ubuntu18.04安装g2o,及问题解决_HyperZhu的博客-CSDN博客_ubuntu18.04安装g2o sudo apt-get install cmake libeigen3-dev ...

  9. 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客

    "当了十年 IT 程序员,我转型做自动驾驶开发的这五年"_<新程序员>编辑部的博客-CSDN博客

  10. ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

    ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

最新文章

  1. 还在用肉眼找不同吗?这个技术轻松搞定
  2. Windows下查看dll被哪个进程调用
  3. tank html5,index.html
  4. JZOJ 5460. 【NOIP2017提高A组冲刺11.7】士兵训练
  5. 自我觉察-3:发现-我这么做究竟为了什么?
  6. nginx php大文件上传,Nginx+PHP上传大文件设置
  7. 【Vue3.0】—V- model‘ directives require no argument.
  8. “让天下没有难开的店”,宣言来自无人车公司AutoX
  9. asp.net添加自定义用户控件并传值
  10. 边缘独立(marginal independent)的理解及举例
  11. 网页版扫雷 -- React练习
  12. 【杂谈】扒一扒Reddit,Medium,Quora与知乎等国内外高质量AI社区与内容平台
  13. 计算机组成--虚拟存储器
  14. 每个python对象都具有布尔值_百度T7架构师透析Python对象你需要知道这些
  15. 泛型编程和STL基础学习(C++)(未完待续)
  16. 程序员有七个等级?你又属于哪个等级呢?
  17. Word插入题注优化(自动删除标签与编号前的空格,编号后添加空格)
  18. gsoc 任务_gsoc 2020最终报告wikimedia transferpy改进
  19. 如何深入学习JAVA
  20. 数据挖掘实战(4)——聚类(Kmeans、MiniBatchKmeans、DBSCAN、AgglomerativeClustering、MeanShift)

热门文章

  1. (转)移植32位程序64位系统
  2. SpringBoot整合Knife4j替代Swagger
  3. 3-Tensorflow-demo_1-Graph和Session
  4. vue中directive
  5. ps中的风,浮雕,扩散,拼贴,凸出,表面模糊,动感模糊,高斯模糊,径向模糊,平均,特殊模糊,形状模糊,波浪,波纹,极坐标
  6. 数据库备份 Mysql table '' doesn t exist
  7. 面向接口编程开发打印机墨盒:彩色,黑白纸张类型:A4,B5墨盒和纸张都不是打印机厂商提供的打印机厂商要兼容市场上的墨盒,纸张
  8. 台式计算机键盘不亮,台式机键盘不亮怎么办
  9. 清华校长送给毕业生的五句话
  10. html5段落缩进,在Word 2010中缩进段落