首页 > 试题广场 >

考虑一个父组件 `Parent`,它将一个通过复杂计算得到的

[单选题]
考虑一个父组件 `Parent`,它将一个通过复杂计算得到的对象 `data` 作为 prop 传递给子组件 `Child`。如果 `Parent` 组件因为自身其他无关状态的改变而频繁重新渲染,为了避免 `Child` 组件进行不必要的渲染,最有效的优化组合是什么?
  • 仅使用 `React.memo` 包裹 `Child` 组件。
  • 仅在 `Parent` 组件中使用 `useMemo` 来缓存 `data` 对象。
  • 在 `Parent` 中使用 `useMemo` 缓存 `data` 对象,并同时使用 `React.memo` 包裹 `Child` 组件。
  • 在 `Parent` 中使用 `useCallback` 缓存 `data` 对象,并使用 `React.memo` 包裹 `Child` 组件。
React 核心内置 Hooks 共 10个(官方稳定支持,日常开发90%场景够用),另有实验性 Hooks 待稳定,下面按「常用优先级」整理,好记不混淆: 一、核心必用 Hooks(5个,基础中的基础) -  useState :组件状态管理(如计数、表单值) -  useEffect :处理副作用(发请求、DOM操作、监听事件) -  useContext :跨组件共享数据(不用层层传props) -  useRef :获取DOM元素或保存跨渲染的变量(值变不触发重渲染) -  useMemo :缓存复杂计算结果(省性能) 二、性能优化/高级 Hooks(5个,进阶必备) -  useCallback :缓存函数引用(配合 React.memo 避免子组件无效重渲染) -  useReducer :复杂状态逻辑管理(替代 useState,适合多状态联动) -  useImperativeHandle :自定义暴露给父组件的实例方法(配合 forwardRef) -  useLayoutEffect :DOM更新后同步执行(比 useEffect 早,适合操作DOM样式) -  useDebugValue :给自定义Hook加调试标签(React DevTools 中显示更友好) 三、实验性 Hooks(暂不推荐生产用) 如  useDeferredValue (延迟更新非紧急状态)、 useTransition (标记非阻塞更新)、 useId (生成唯一ID)等,需开启实验性标志才能用,稳定后会纳入核心。 关键记忆点 - 核心 Hooks 记「状、效、上、引、缓」(对应 useState/effect/Context/ref/memo); - 优化 Hooks 记「函缓、减器、暴露、同步、调试」(对应 useCallback/reducer/ImperativeHandle/layoutEffect/DebugValue)。
发表于 2025-11-15 14:51:38 回复(0)