react动态路由(三)

  

App.jsx

import { NavLink,Route,Routes,Navigate, useNavigate } from 'react-router-dom'
import './style.css'
import Home from './Home'
import Recomend from './Recomend'
import Attention from './Attention'
import NotFound from './NotFound'
import Recomend2 from './Recomend2'
import Ranking from './Ranking'
// 手动路由 必须要为类组件 因为函数式组件可以
import About from './About'
import Detail from './Detail'
export default function App() {
    var navigate = useNavigate()
    function navigateto(path){
        console.log(path);
        navigate(path);
    }
        return (
            <div>
                <div className="header">
                    <NavLink to='/home'>发现音乐</NavLink>
                    <NavLink to='/recomend'>我的音乐</NavLink>
                    <NavLink to='/attention'>关注</NavLink>
                    <button onClick ={e=>navigateto('/about')}>关于</button>
                </div>
                <div className="center">
                <Routes>
                    {/* 嵌套路由 */}
                    <Route path='/' element={<Navigate to='/home'/>}></Route>
                    {/* <Route path='/' element={<Home/>}></Route> */}
                    <Route path='/home' element={<Home/>}>
                        <Route path='/home/recomend2' element={<Recomend2/>}></Route>
                        <Route path='/home/ranking' element={<Ranking/>}></Route>
                    </Route>
                    <Route path='/recomend' element={<Recomend/>}></Route>
                    <Route path='/attention' element={<Attention/>}></Route>
                    <Route path='*' element={<NotFound/>}></Route>
                    {/* 手动路由 */}
                    <Route path='/about' element={<About/>}></Route>
                    <Route path='/detail/:id' element={<Detail/>}></Route>
                </Routes>
                </div>
                <div className="footer"></div>
            </div>
        )
}

Detail.jsx组件

import React, { Component } from 'react'
import withRouter from './hoc/withRouter'
export class Detail extends Component {
    render() {
        return (
            <div>
                <h1>详情页</h1>
                <div>当前歌曲:id{this.props.router.params.id}</div>
            </div>
        )
    }
}

export default withRouter(Detail)

hoc文件夹中的withRouter.js

import { useNavigate,useParams } from "react-router-dom"
export default function withRouter (Warpcomment){
    return function (props){
        // 与Ranking中保持一致
        var navigate = useNavigate();
        // 动态路由
        var params = useParams();
        var router = {navigate,params}
        return <Warpcomment{...props} router ={router}></Warpcomment>
    }
}

hoc文件夹中的index.js

import withRouter from "./withRouter";
export default withRouter

Recomend2.jsx组件

import React, { Component } from 'react'
import withRouter from './hoc/withRouter'
export  class Recomend2 extends Component {
    state={
        music:[{id:1,name:'music1'},{id:2,name:'music2'},{id:3,name:'music3'}]
    }
    navigitedetail(id){
        console.log(id);
        this.props.router.navigate('/detail/'+id)
    }
    render() {
        return (
            <div>
                <h1>推荐页面</h1>
                <ul>
                    {this.state.music.map((item)=>{
                        return (<li onClick={e=>this.navigitedetail(item.id)}>{item.name}</li>)
                    })}
                </ul>
            </div>
        )
    }
}
export default withRouter(Recomend2)

Ranking.jsx组件

import React, { Component } from 'react'
import withRouter from './hoc/withRouter'
export class Ranking extends Component {
    navgite(path){
        // navigate为withRouter中定义的保持一致
        this.props.router.navigate(path)
    }
    render() {
        return (
            <div>
                <h1>排行榜</h1>
                <button onClick={e=>this.navgite('/home')}>返回主页</button>
            </div>
        )
    }
}
export default withRouter(Ranking)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 React 动态路由,你需要用到 React Router。React Router 是一个用于 React 应用程序的第方库,它提供了一个强大的路由系统,可以帮助你管理应用程序的不同页面和 URL。 以下是实现 React 动态路由的基本步骤: 1. 安装 React Router:在终端中使用 npm 或 yarn 安装 React Router。 2. 导入 React Router:在你的项目中导入 React Router 的必要组件。 3. 创建路由组件:使用 React Router 中的 Route 组件来创建不同的路由。 4. 创建动态路由:使用 React Router 中的参数化 URL 功能来创建动态路由。 5. 处理动态路由:在你的组件中使用 props.match.params 对象来获取动态路由参数。 以下是一个简单的示例代码,其中包含一个动态路由: ``` import React from 'react'; import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; const App = () => { return ( <Router> <Switch> <Route exact path="/" component={Home} /> <Route path="/users/:id" component={User} /> <Route component={NotFound} /> </Switch> </Router> ); }; const Home = () => { return <h1>Home Page</h1>; }; const User = (props) => { return <h1>User {props.match.params.id}</h1>; }; const NotFound = () => { return <h1>404 Not Found</h1>; }; export default App; ``` 在上面的代码中,我们创建了一个包含个路由的应用程序: - /:指向 Home 组件。 - /users/:id:指向 User 组件,并且 id 参数是动态的。 - 其他:指向 NotFound 组件。 当用户访问 /users/1 时,会渲染 User 组件,并且 props.match.params.id 的值为 1。 希望这可以帮助你理解如何实现 React 动态路由
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值