Hooks组件逻辑复用有哪些好处
面试速答
- 以下内容以 React 18 为准。
- Hooks 最大的价值之一,就是让 状态逻辑复用回到了“普通函数组合”。
- 相比 class 时代的 HOC 和 render props,Hooks 的优势主要有:
- 没有额外组件嵌套
- 逻辑聚合更自然
- 依赖关系更显式
- 更容易拆分、测试和组合
一、没有 wrapper hell
自定义 Hook 只是函数调用,不会额外包一层组件:
const user = useUser()
const theme = useTheme()
const width = useWindowWidth()
相比:
withUser(withTheme(withResize(Page)))
可读性明显更好。
二、相关逻辑可以放在一起
在 Hooks 里,某个能力的状态、effect、ref 可以天然收拢在一个自定义 Hook 内部。
比如一个 useRequest 可以把:
- loading
- data
- error
- cancel
都组织在一个地方,而不是散落在多个生命周期方法中。
三、组合能力强
自定义 Hook 之间可以继续组合:
function usePageData() {
const user = useUser()
const permission = usePermission(user.id)
return {user, permission}
}
这让复杂逻辑可以按业务层级逐步抽象。
四、测试和类型体验更友好
因为它更接近普通函数,通常更容易:
- 单独验证逻辑
- 做类型约束
- 做内部拆分
五、React 18 语境下更主流
现代 React 文档、生态和最佳实践几乎都围绕函数组件和 Hooks 展开,所以 Hooks 不只是“复用更优雅”,也是主流开发模型本身。
标准答法
问:Hooks 复用逻辑的好处是什么?
答:它把状态逻辑复用从 HOC/render props 这种组件层复用,变成了函数层组合,没有额外包装层,逻辑更集中、组合更自由、维护成本更低。
易错点
- 只答“写起来更简单”,太表面。
- 不提它消除了 HOC/render props 的结构负担。
- 误以为 Hooks 只是语法糖升级。
速记要点
- Hooks 复用的是状态逻辑,不增加组件层级。
- 逻辑更集中,组合更自然。
- 这是 React 现代开发范式的重要变化。