React学习: 04 react-router-dom v6 react的路由简单实例

react-router-dom

简介

前端和路由打交道几乎是不可避免的,react下的路由包整合到了react-router-dom中,下载安装react-router-dom v6 就包含了路由操作的基本库类了.

安装

npm install react-router-dom@6

最简单的一个小例子

当使用命令npx create-react-app my-app创建了一个前端的项目之后,首先引入react-router-dom,使用<BrowserRouter>包裹dom树的最外层,代码如下:

// index.js
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import App from './App'

ReactDOM.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>
    , document.getElementById('root'))

注册路由:

//index.js
{/* 注册路由 */}
<Routes>
         <Route path="/about" element={<About/>} />
         <Route path="/home" element={<Home/>} />
 </Routes>

连接组件:

<NavLink to="/about">
          About
        </NavLink>
        <NavLink to="/home">
          Home
</NavLink>

用来跳转到指定页面,效果如下:

在这里插入图片描述

路由表和子路由

目前来说,比较方便成熟的做法是定义一个路由表,首先创建路由表,定义页面的路由,

src/routes/index.js
import HookHome from '../components/Hook-test'
import Home from '../components/Home'

import RouteHome, { HomePage, AboutPage,NewsPage,DetailPage } from '../components/Route-test'

const routes = [
    {
        path: '/',
        element: <Home />
    },
    {
        path: 'hook',
        element: <HookHome />,
    },
    {
        path: 'home',
        element: <Home />
    },
    {
        path: 'route',
        element: <RouteHome />,
        children: [
            {
                path: 'aboutpage',
                element: <AboutPage />
            },
            {
                path: 'newspage',
                element: <NewsPage />,
                children: [
                    {
                        path:'detail',
                        element: <DetailPage />
                    },
                ]
            },
            {
                path: 'homepage',
                element: <HomePage />
            }
        ]
    }
]

export default routes

路由表的好处是直观自然,修改方便,尤其是定义子路由更是直观了很多.
在app.js中引入定义好的路由表:

import { useRoutes } from "react-router-dom";
import routes from './routes'
const element = useRoutes(routes)

使用{element}展示组件页面,如果有自组件的话,使用展示子组件的页面.

路由传参

react router 路由传参有几种方法,我个人比较喜欢useLocation(),配合useNavigate()使用起来还是很方便的,
定义一个事件的方法:

const navigate = useNavigate()
function showDetail(item) {
    navigate('detail', {
        replace: false,
        state: {
            id: item.id,
            title: item.title,
            content: item.content
        }
    })
}

组件中渲染代码:

<div>
    <h1>Welcome to news</h1>
    <List sx={style} component="nav" aria-label="mailbox folders">
        {
            messages.map((item) => {
                return (
                    <div>
                        <ListItem key={item.id} onClick={() => showDetail(item)} button>
                            <NavLink to="detail"
                                state={{
                                    id: item.id,
                                    title: item.title,
                                    content: item.content
                                }} />
                            {item.title}查看详情
                        </ListItem>
                        <Divider />
                    </div>

                )
            })
        }
    </List>
    {/* 指定路由组件的展示位置 */}
    <Outlet />
</div>

接收组件的代码:

function DetailPage() {
    const { state } = useLocation()
    const id = state.id;
    const title = state.title;
    const content = state.content;
    return (
        <ul>
            <li>id:{id}</li>
            <li>title:{title}</li>
            <li>content:{content}</li>
        </ul>
    )
}

在这里插入图片描述

对于一些简单的数据传递这些足够了,当然需求复杂的可以看看一些其他的api,官方都有接收,csdn里也能搜到的.至此react的路由简单案例就到这里吧.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React Router是一个用于建立SPA应用程序的库,它提供了一种将应用程序状态与URL同步的方式。React Router v6React Router的最新版本,它引入了一些新的概念和语法。 下面是使用React Router v6搭建路由的步骤: 1. 安装React Router v6 使用npm或者yarn安装React Router v6: ``` npm install react-router-dom@next ``` 2. 创建路由 在应用程序的入口文件中,使用BrowserRouter创建一个路由: ```jsx import { BrowserRouter } from 'react-router-dom'; ReactDOM.render( <BrowserRouter> <App /> </BrowserRouter>, document.getElementById('root') ); ``` 3. 定义路由 使用Route组件定义路由。Route组件的path属性指定URL的路径,component属性指定该路径对应的组件: ```jsx import { Route } from 'react-router-dom'; function App() { return ( <div> <Route path="/" component={Home} /> <Route path="/about" component={About} /> </div> ); } ``` 在上面的例子中,当URL路径为“/”时,渲染Home组件;当URL路径为“/about”时,渲染About组件。 4. 处理404页面 使用Route组件的exact属性确保路由匹配完全相等的路径。这样可以避免在匹配“/”路径时同时匹配到所有其他路径。 使用Route组件的path属性指定“*”路径,即匹配所有路径的路径。将这个Route组件放在所有其他Route组件的下面,就可以为未匹配到任何路径的URL显示404页面: ```jsx import { Route, Routes } from 'react-router-dom'; function App() { return ( <div> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="*" element={<NotFound />} /> </Routes> </div> ); } ``` 在上面的例子中,当URL路径为任何未匹配到的路径时,渲染NotFound组件。 5. 嵌套路由 使用Routes组件嵌套Route组件,可以创建嵌套路由。在嵌套路由中,父级Route组件的path属性包含所有子级Route组件的path属性的前缀。 ```jsx import { Route, Routes } from 'react-router-dom'; function App() { return ( <div> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />}> <Route path="team" element={<Team />} /> <Route path="history" element={<History />} /> </Route> <Route path="*" element={<NotFound />} /> </Routes> </div> ); } ``` 在上面的例子中,当URL路径为“/about/team”时,渲染Team组件;当URL路径为“/about/history”时,渲染History组件。 React Router v6引入了一些新的语法,例如使用Routes组件代替Router组件,使用element属性代替component属性等。这些语法的目的是让React Router更加简洁易用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这里不提提纳里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值