面试题答案
一键面试优化思路
- 使用 React.memo 或 PureComponent:对于不会因 props 变化而重新渲染的组件,使用
React.memo
(函数组件)或PureComponent
(类组件)进行包裹,这样当 props 没有变化时,组件不会重新渲染。 - 利用 useMemo 和 useCallback:对于计算开销较大的函数或数据,使用
useMemo
缓存计算结果,useCallback
缓存函数,避免不必要的重新创建。 - 路由参数处理:在 React Router 中,通过
useParams
钩子来获取动态路由参数,确保每次路由切换时,组件能正确获取最新参数。
关键代码片段
假设使用 React Router v6:
import React from'react';
import { BrowserRouter as Router, Routes, Route, useParams } from'react-router-dom';
// 被 React.memo 包裹的子组件
const ChildComponent = React.memo(({ parentId, childId }) => {
return (
<div>
<p>Parent ID: {parentId}</p>
<p>Child ID: {childId}</p>
</div>
);
});
const ParentComponent = () => {
const { parentId } = useParams();
const { childId } = useParams();
// 使用 useCallback 缓存函数
const handleClick = useCallback(() => {
// 处理点击逻辑
}, []);
// 使用 useMemo 缓存数据
const expensiveData = useMemo(() => {
// 进行复杂计算
return result;
}, []);
return (
<div>
<ChildComponent parentId={parentId} childId={childId} />
<button onClick={handleClick}>Click Me</button>
</div>
);
};
function App() {
return (
<Router>
<Routes>
<Route path="/parent/:parentId/child/:childId" element={<ParentComponent />} />
</Routes>
</Router>
);
}
export default App;
通过以上方式,在路由切换时,能有效避免不必要的重新渲染,并正确获取和处理动态路由参数。