react路由配置

import {
    Routes,
    Route,
    Navigate,
    useLocation,
    useNavigate,
} from "react-router-dom";
import { lazy, Suspense, useEffect } from "react";
import { Box, Spinner, Text, Layer } from 'grommet';

const Frame = lazy(() => import('@/pages/Frame'))
const Home = lazy(() => import('@/pages/Home'))
const Serch = lazy(() => import('@/pages/Serch'))
const Logins = lazy(() => import('@/pages/Login'))
const Register = lazy(() => import('@/pages/Register'))
const Shoping = lazy(() => import('@/pages/Shoping'))
const ClassIfication = lazy(() => import('@/pages/ClassIfication'))
const User = lazy(() => import('@/pages/User'))
const Texts = lazy(() => import('@/components/TabBar'))
const Password = lazy(() => import('@/pages/Password'))

export const router = () => {
    const location = useLocation()
    let token = () => {
        let token = sessionStorage.getItem('token')
        return token ? true : false
    }
    const navgate = useNavigate()
    useEffect(() => {
        // console.log(location)
        routes.forEach(element => {
            if (element.path == location.pathname) {

                if (element.meta.power && !token()) {
                    navgate('/login')
                }
                document.title = element.meta.title

            } else {
                if (element.chidren) {

                    element.chidren.forEach(element => {
                        if (element.path == location.pathname) {

                            if (element.meta.power && !token()) {
                                navgate('/login')
                            }

                            document.title = element.meta.title

                        }
                    });
                }
            }
        });
    }, [location])

    const routes = [
        {
            path: '/',
            element: <Frame />,
            meta: { title: '首页', power: false },
            chidren: [
                {
                    path: '/',
                    element: <Home />,
                    meta: { title: '首页', power: false },
                },
                {
                    path: '/home',
                    element: (<Home />),
                    meta: { title: '首页', power: false }
                }, {
                    path: '/serch',
                    element: (<Serch />),
                    meta: { title: '搜索', power: false }
                },
                {
                    path: '/shoping',
                    element: (<Shoping />),
                    meta: { title: '购物车', power: false }
                },
                {
                    path: '/classification',
                    element: (<ClassIfication />),
                    meta: { title: '商品分类', power: false }
                },
                {
                    path: '/user',
                    element: (<User />),
                    meta: { title: '个人主页', power: false }
                },
            ]
        },

        {
            path: '/login',
            element: (<Logins />),
            meta: { title: '登录', power: false }
        },
        {
            path: '/password',
            element: (<Password />),
            meta: { title: '忘记密码', power: false }
        },
        {
            path: '/register',
            element: <Register />,
            meta: { title: '注册', power: false }
        },
        {
            path: '/text',
            element: <Texts />,
            meta: { title: '注册', power: false }
        }
    ]




    return (
        <Routes>

            {routes.map((item, i) => (
                <Route key={item.path} path={item.path} element={<Suspense fallback={<Layer>
                    <Box
                        align="center"
                        justify="center"
                        gap="small"
                        direction="row"
                        alignSelf="center"
                        pad="large"
                    >
                        <Spinner />
                        <Text>Loading...</Text>
                    </Box>
                </Layer>} >
                    {
                        item.element
                    }
                </Suspense>}>
                    {item.chidren?.map((items, i) => (
                        i == 0 ? <Route key={items.path + i} path={items.path} element={
                            <Navigate to={item.chidren[1].path} />
                        } /> : <Route key={items.path} path={items.path} element={<Suspense fallback={<Layer>
                            <Box
                                align="center"
                                justify="center"
                                gap="small"
                                direction="row"
                                alignSelf="center"
                                pad="large"
                            >
                                <Spinner />
                                <Text>Loading...</Text>
                            </Box>
                        </Layer>} >
                            {
                                items.element
                            }
                        </Suspense>} />
                    ))}
                </Route>
            ))}
        </Routes>
    )
}
export default router

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值