2021年6月4日星期五

react中context的优化

使用react的context之后,会导致组件被刷新

很多时候,为了减少render的次数,我们不得不使用shouldUpdate或memo等方法,但是当组件使用了context上下文之后,无论你的反回值是true或false,只要context里的值发生了改变,都无法阻止组件的render,这也是因为组件需要监听context值的变化,但有时,我们并不需要所有变化都被更新。所以尝试了几种方案进行优化:

  1. 更新时不使用扩展符{...},context就不会生成新的对象,但明显不合理。
  2. 把值存在顶层的state中,不存context中,这样又有点绕,得不偿失
  3. 使用EventEmitter这种发布式模式,不在本次讨论范围内,包括使用redux的方案
  4. 使用不同颗粒度的context
  5. 既然使用了useContext的组件一定会被render,只要把useContext进行上移即可,移到父组件上去调用,相当于一种折中的方式,把大量子组件的更新context的方法移交到父组件中去,这样就可以变相的优化了。

  在以上几点中,我最后选择了使用第五点,也就是把context的使用提升到了父级,这就有点类似于redux中的connect组件了,在这里可以把context转化成props传入子组件,然后在子组件中判断props的变化。









原文转载:http://www.shaoqun.com/a/784154.html

跨境电商:https://www.ikjzd.com/

ensogo:https://www.ikjzd.com/w/1485

houzz:https://www.ikjzd.com/w/236

亚马逊应用商店:https://www.ikjzd.com/w/531

电霸:https://www.ikjzd.com/w/2597


使用react的context之后,会导致组件被刷新很多时候,为了减少render的次数,我们不得不使用shouldUpdate或memo等方法,但是当组件使用了context上下文之后,无论你的反回值是true或false,只要context里的值发生了改变,都无法阻止组件的render,这也是因为组件需要监听context值的变化,但有时,我们并不需要所有变化都被更新。所以尝试了几种方案进行优
中国邮政邮乐网:https://www.ikjzd.com/w/1776
patpat:https://www.ikjzd.com/w/1079.html
心怡物流:https://www.ikjzd.com/w/1327
两根粗大黑肉来回进出 娇嫩同时容纳两根巨物:http://lady.shaoqun.com/m/a/248095.html
刚搬来的漂亮女邻居 口述已婚男和离异女的暧昧经历:http://lady.shaoqun.com/m/a/269736.html
被我逼婚后 男友让备胎转正了:http://lady.shaoqun.com/a/270897.html
深圳盐田港的拥堵状况正在恶化、全球集装箱运价创历史最高:https://www.ikjzd.com/articles/145353
读书笔记:凤凰的性别:http://lady.shaoqun.com/a/350012.html
你可以在社交网站上为自己选择71种性别。这是什么说法?:http://lady.shaoqun.com/a/350013.html