«

React二级配置路由

时间:2023-8-23 09:02     作者:六思逸     分类: React


APP.jsx

import { HashRouter, Route, Routes } from "react-router-dom";
import React, { lazy, Suspense } from "react";
import "./App.css";

const Login = lazy(() => import("./views/login/LoginPage.jsx"));
const Layout = lazy(() => import("./views/layout/LayoutPage.jsx"));
const Hot = lazy(() => import("./views/hot/HotMovie.jsx"));
const Cinema = lazy(() => import("./views/cinema/CinemaPage.jsx"));
const Mine = lazy(() => import("./views/mine/MinePage.jsx"));
const City = lazy(() => import("./views/city/CityPage.jsx"));

function App() {
  return (
    <HashRouter>
      <Suspense fallback={<div>Loading...</div>}>
        <Routes>
          <Route path="/" element={<Login />} />
          <Route path="/login" element={<Login />} />
          <Route path="/layout" element={<Layout />}>
            <Route path="hot" element={<Hot />} />
            <Route path="cinema" element={<Cinema />} />
            <Route path="mine" element={<Mine />} />
          </Route>
          <Route path="/city" element={<City />} />
        </Routes>
      </Suspense>
    </HashRouter>
  );
}

export default App;

Layout.jsx

import React, { useState } from 'react'
import { Tabs, TabBar } from 'antd-mobile'
import './LayoutPage.scss'

import {
    Outlet,
    useLocation,
    useNavigate,
    MemoryRouter as Router,
} from 'react-router-dom'
import {
    MovieOutline,
    VideoOutline,
    UserOutline,
} from 'antd-mobile-icons'

export default function LayoutPage() {
    const navigate = useNavigate()
    const location = useLocation()
    const { pathname } = location

    const setRouteActive = (value) => {
        navigate(value)
    }
    const tabs = [
        {
            key: '/layout/hot',
            title: '热映',
            icon: <MovieOutline />,
        },
        {
            key: '/layout/cinema',
            title: '影院',
            icon: <VideoOutline />,
        },
        {
            key: '/layout/mine',
            title: '我的',
            icon: <UserOutline />,
        },
    ]
    return (
        <div className='layout'>
            {/* 顶部信息 */}
            <div className='layout_top'>
                {/* 二级路由出口 */}
                <Outlet />
            </div>
            {/* 底部导航 */}
            <div className='layout_bottom'>
                <TabBar activeKey={pathname} onChange={value => setRouteActive(value)}>
                    {tabs.map(item => (
                        <TabBar.Item key={item.key} icon={item.icon} title={item.title} />
                    ))}
                </TabBar>
            </div>
        </div>
    )

}

标签: React路由配置

版权所有:六思逸
文章标题:React二级配置路由
除非注明,文章均为 六思逸 原创,转载请注明作者和出处 六思逸

扫描二维码,在手机上阅读

推荐阅读: