MST

星途 面试题库

面试题:React Router 中嵌套路由与动态路由结合实现复杂导航

假设你正在开发一个博客系统,需要实现多级页面导航。比如有首页、分类页(每个分类有单独页面)、文章详情页(根据文章 ID 展示不同内容)。请使用 React Router 设计路由结构,并阐述如何处理嵌套路由和动态路由的参数传递及页面渲染逻辑。
46.3万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试
  1. 安装 React Router
    • 首先确保项目中安装了 react - router - dom,可以使用 npm install react - router - domyarn add react - router - dom 进行安装。
  2. 设计路由结构
    • 在 React 应用的入口文件(通常是 index.jsApp.js)中设置路由。假设项目结构中有 Home 组件(首页)、Category 组件(分类页)、ArticleDetail 组件(文章详情页)。
    import { BrowserRouter as Router, Routes, Route } from'react - router - dom';
    import Home from './components/Home';
    import Category from './components/Category';
    import ArticleDetail from './components/ArticleDetail';
    
    function App() {
        return (
            <Router>
                <Routes>
                    <Route path="/" element={<Home />} />
                    <Route path="/category/:categoryId" element={<Category />}>
                        {/* 这里可以处理分类页下可能存在的嵌套路由 */}
                    </Route>
                    <Route path="/article/:articleId" element={<ArticleDetail />} />
                </Routes>
            </Router>
        );
    }
    
    export default App;
    
  3. 处理嵌套路由
    • 以分类页为例,如果分类页下还有子页面,比如某个分类的归档页面。可以在 Category 组件内部继续设置路由。
    import { Routes, Route } from'react - router - dom';
    import CategoryArchive from './CategoryArchive';
    
    function Category() {
        return (
            <Routes>
                <Route path="archive" element={<CategoryArchive />} />
            </Routes>
        );
    }
    
    export default Category;
    
    • 这样访问 /category/1/archive 就可以渲染 CategoryArchive 组件,其中 1 是分类的 categoryId
  4. 动态路由的参数传递
    • 在上述路由配置中,categoryIdarticleId 就是动态路由参数。
    • 在组件中获取参数的方法,以 ArticleDetail 组件为例:
    import { useParams } from'react - router - dom';
    
    function ArticleDetail() {
        const { articleId } = useParams();
        // 这里的 articleId 就是从路由中获取的参数
        return (
            <div>
                <p>文章详情页,文章 ID: {articleId}</p>
            </div>
        );
    }
    
    export default ArticleDetail;
    
  5. 页面渲染逻辑
    • 首页Home 组件直接渲染首页相关内容,如最新文章列表、热门分类等。
    • 分类页Category 组件根据传入的 categoryId 从数据层获取该分类的相关文章数据,并渲染文章列表。如果存在嵌套路由,根据子路由路径渲染相应子组件。
    • 文章详情页ArticleDetail 组件根据传入的 articleId 从数据层获取具体文章内容,并渲染文章标题、正文等详细信息。