React路由学习

2022-08-11 18:53:25 浏览数 (1)

1.安装react-router-dom

代码语言:javascript复制
$ npm i react-router-dom --save

2.在页面进行引入

代码语言:javascript复制
import {BrowserRouter as Router,Route,Link} from 'react-router-dom'

3.编写两个无状态的路由组件

// 声明路由组件 一个func 相当于是一个路由组件 

// 这里是无状态路由的写法 实际工作中会把路由组件单独的写成一个js来进行引入

代码语言:javascript复制
 function Index (){
     return <h2>Jspang.com</h2>
 }
 function List (){
     return <h2>List-page</h2>
 }

4.创建控制路由的组件

代码语言:javascript复制
function AppRouter (){
    return(
        <Router>
            <ul>
                {/* Link 为路由的跳转 类似于a标签 */}
                <li><Link to='/'>首页</Link></li>
            </ul>

            {/* exact 为精准定位 必须为/ 才能进行匹配 
                Route 为路径的指引
                component 为上面绑定的组件
                path 为路径
            */}
            <Route path="/" exact component = {Index} />
            {/* :id 设置规则 不传不跳转 */}
            <Route path="/list/:id"  component = {List} />
            <Route path="/home/"  component = {Home} />
        </Router>
    )
}
// 暴露出去
export default AppRouter;

路由的URL传参

1.在路由指引组件上声明传参规则,不传则不会跳转

代码语言:javascript复制
<Route path="/list/:id"  component = {List} />

2.在跳转过来的页面接收值

// 在生命周期中接收 路由传递的值

代码语言:javascript复制
 componentDidMount(){
let ReadID = this.props.match.params.id
        console.log(ReadID)
}

3.重新设置state的值可以在声明周期中使用this.setState({}),前提是设置的数据需要在state中声明好

4.路由的重定向 引入RediRect

代码语言:javascript复制
import {Link,Redirect } from 'react-router-dom'
编程式重定向
this.props.history.push('/home/')
标签重定向 在render最外层标签中写入
<Redirect to="/home/" /> 

路由的嵌套

1.在子路由中建立孙路由直接引入即可

2.根据后台返回的数组来动态渲染路由

模拟一组数据

代码语言:javascript复制
    let routeConfig =[
        {path:'/',title:'博客首页',exact:true,component:Index},
        {path:'/video/',title:'视频教程',exact:false,component:Video},
        {path:'/work/',title:'职场技能',exact:false,component:Work}
      ]
    return(
        <Router>
            <div className="mainDiv">
                <div className="leftNav">
                    <h3>一级导航</h3>
                    <ul>
                        {
                            routeConfig.map((item,index)=>{
                                return (
                                    <li key={index}>
                                        <Link to={item.path}>{item.title}</Link>
                                    </li>
                                )
                            })
                        }
                    </ul>
                </div>
            </div>

            <div className="rightMain">
                {
                    routeConfig.map((item,index)=>{
                        return (
                            <Route path={item.path}  
                                   exact={item.exact} 
                                   component={item.component} />
                        )
                    })
                }
            </div>
        </Router>

0 人点赞