react 我所踩过的坑

ToDoList是我学习react的开始,对于列表组件,我进行的组件封装是这样的层次: TodoitemList——>TodoLi——>TodoItem


未修改前的key放在li上

这些组件外层包裹的是rudux和react-dnd封装,方便做数据管理和拖拽功能。

在demo演示的时候,导师指出的第一个问题就是组件化思想,对组件的封装有问题。我的理解是todoli分装好了之后,再在li下面封装一个todoitem完全没有必要,因为li现在的存在作用仅仅是一个数据转存,没有任何存在的必要性,完全可以合并todoli和todoitem做为一个组件。

第二个问题是render,用数组返回的li元素,设置好key了,做了shouldComponentUpdate判断,如果元素内容没有变化,就不要销毁重新建立,而是再次使用,这样可以减少大量的性能消耗。但是仍旧遇到问题,就是删除一个元素后,排列再之后的li都会再次render,should生命周期内判断返回的是true,而且willunmounted每次销毁的都是最后一个元素而不是点击删除的对应元素。

正常的逻辑是key和shuold都写好了,不应该出现未修改的元素也会render,不符合diff算法。最终在官网上看到该问题的产生的原因,也只能感叹对react的了解和理解太少。


官方规范

将key提取到todoli上,发现果然不再render未修改的元素,保证了性能


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 正态分布&幂律分布:正态分布,像倒钟一样的曲线图,比如,店面员工业绩排名,员工表现排名,店铺款式分类等。 幂...
    杨雪雪阅读 177评论 0 0
  • 祸从口出 这一点也说的没错 很多事情 都是由嘴而挑起的 在很久以前 我们的祖先为何没有那么矛盾 没有那么多纷争呢 ...
    小鱿鱼阅读 428评论 0 0
  • 张红云 平顶山 坚持分享第241天( 原创总第409天 2018年1月18日 星期四) 今天在我们走进心理学...
    红云_杨柳清风阅读 383评论 0 0
  • 每个人都是一样的,很公平,在孤独这方面,人是需要孤独的,但是很多人却把它当作贬义词,讨厌孤独。进入大学一圈,他就报...
    不像话的故事阅读 217评论 0 1