老师
来源:3-12 自定义 hook 第三部分 - 正确的方式完成 URLLoader

慕侠4287760
2020-10-27
老师我发现,如果使用hook,怎么去避免其他组件的渲染呢,类似 SCU 这样的
比如这里
这里其实更新了state的 loading, 和data
然后我在hello组件里面发现 theme 被打印了两次,应该就是因为其他组件修改,然后这个组件也被渲染了,有什么方法可以避免呢?
谢谢老师,我是ract 初学者,在vue里面只会更新对应的组件,而react似乎更新整个组件树,这个底层原因又是什么呢,为什么要这么做再次感谢
写回答
1回答
-
同学你好 react 更新组件默认有三种情况 第一属性改变 第二内部状态state改变 第三父组件更新(这里属于第三种情况,虽然Hello 都props 和 state 都没有更新),在 class 类型的 React 组件中,我们有 shouldComponentUpdate 和 PureComponent 帮我们完成 props 的对比和判断,在 hooks 中,我们可以使用 React.memo 来完成这个任务。https://zh-hans.reactjs.org/docs/hooks-faq.html#how-do-i-implement-shouldcomponentupdate
你可以这样修改一下你的代码
import React, { useContext, memo } from 'react' const Hello: React.FC<IHelloProps> = memo((props) => { ... })
再试一下 会发现这个打印就消失了
结论就是 React.memo 等效于 PureComponent,它会帮你多做一件事情,比较新的props和旧的props,假如没有变化,就不更新这个组件
022021-01-07
相似问题