面试题答案
一键面试1. 安装依赖
确保已经安装了 react-router-dom
,如果没有安装,可以使用以下命令安装:
npm install react-router-dom
2. 关键代码示例
import React, { useState, useEffect } from'react';
import { BrowserRouter as Router, Routes, Route, useLocation } from'react-router-dom';
// 假设的页面组件
const Home = () => <div>Home Page</div>;
const About = () => <div>About Page</div>;
const App = () => {
const location = useLocation();
const [pageTitle, setPageTitle] = useState('');
useEffect(() => {
if (location.pathname === '/') {
setPageTitle('Home');
} else if (location.pathname === '/about') {
setPageTitle('About');
}
}, [location]);
useEffect(() => {
document.title = pageTitle;
}, [pageTitle]);
return (
<Router>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
};
export default App;
3. 代码解释
- useLocation:这是
react-router-dom
提供的一个 Hook,用于获取当前的路由位置信息。每次路由变化时,location
对象会更新。 - useState:用于在函数组件中添加状态。这里我们使用
pageTitle
状态来存储当前页面的标题,并使用setPageTitle
来更新这个状态。 - 第一个 useEffect:依赖于
location
,意味着每次路由变化(location
更新)时,这个useEffect
会被触发。根据当前的location.pathname
,设置pageTitle
为相应的值。 - 第二个 useEffect:依赖于
pageTitle
,当pageTitle
更新时,会将document.title
设置为pageTitle
的值,从而实现根据路由显示不同的页面标题。 - Router、Routes 和 Route:这些是
react-router-dom
中的组件,用于定义应用的路由结构。Routes
组件包含多个Route
组件,每个Route
组件定义了一个路径和对应的组件。