赵敬训 發表於 2022-2-28 18:45:00

react中配置路由

<h2><span style="font-size: 16px">一个路由就是一个通道,页面之间的跳转其实就是路由的切换,所以每个应用的路由配置是必须的,浅谈react中怎么配置路由</span></h2>
<p><span style="font-size: 16px">首先你要在src文件夹下新建一个router的文件下,在router文件下新建一个index.js(我用的是TS,所以是index.tsx)</span></p>
<p><span style="font-size: 16px"><img src="https://img2022.cnblogs.com/blog/2541384/202202/2541384-20220228183702385-1366526564.png"></span></p>
<p>然后在index.jsx里这样去配置</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import React, { ReactNode, lazy } from "react"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> const Test = lazy(() =&gt; import("../pages/Test"<span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> const Detail = lazy(() =&gt; import("../pages/Detail"<span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Test 和 Detail分别对应你的组件</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">export interface IRoute {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   exact?: <span style="color: rgba(0, 0, 255, 1)">boolean</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">    path: string
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">    title: string
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   icon?<span style="color: rgba(0, 0, 0, 1)">: ReactNode
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   component?<span style="color: rgba(0, 0, 0, 1)">: ReactNode
</span><span style="color: rgba(0, 128, 128, 1)">11</span>   children?<span style="color: rgba(0, 0, 0, 1)">: IRoute[]
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">13</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> export const routes: IRoute[] =<span style="color: rgba(0, 0, 0, 1)"> [
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         path: "/test"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         title: "测试一"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         component: &lt;Test /&gt;
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">    },
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         path: "/detail"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">22</span>         title: "详情"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">23</span>         component: &lt;Detail /&gt;
<span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> ]</pre>
</div>
<p>然后再在scr文件下新建一个components文件下,在此文件夹下新建一个View.jsx的文件,里面这样配置</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import React, { Component, Suspense } from 'react'
<span style="color: rgba(0, 128, 128, 1)"> 2</span> import { HashRouter as Router, Switch, Route } from 'react-router-dom'
<span style="color: rgba(0, 128, 128, 1)"> 3</span> import { routes } from '../router'
<span style="color: rgba(0, 128, 128, 1)"> 4</span> export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class View extends Component {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">    render() {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>             &lt;&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>               &lt;Suspense fallback={&lt;&gt;loading ...&lt;/&gt;}&gt;
<span style="color: rgba(0, 128, 128, 1)"> 9</span>                     &lt;Router&gt;
<span style="color: rgba(0, 128, 128, 1)">10</span>                         {routes.map(r =&gt; (&lt;Switch key={r.path}&gt;
<span style="color: rgba(0, 128, 128, 1)">11</span>                           &lt;Route path={r.path}&gt;
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">                              {r.component}
</span><span style="color: rgba(0, 128, 128, 1)">13</span>                           &lt;/Route&gt;
<span style="color: rgba(0, 128, 128, 1)">14</span>                         &lt;/Switch&gt;))}
<span style="color: rgba(0, 128, 128, 1)">15</span>                     &lt;/Router&gt;
<span style="color: rgba(0, 128, 128, 1)">16</span>               &lt;/Suspense&gt;
<span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>             &lt;/&gt;
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">      )
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">21</span> }</pre>
</div>
<p><span style="font-size: 16px">然后你就可以试着改变url地址栏来改变页面了,注意;hash模式下,你的url前必须加#/</span></p>
<p><span style="font-size: 16px">用history来跳转页面时必须做好配置,部分代码如下:</span></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> import { Link, withRouter, RouteComponentProps } from 'react-router-dom'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)">class Test extends Component{
</span><span style="color: rgba(0, 128, 128, 1)">5</span>
<span style="color: rgba(0, 128, 128, 1)">6</span>
<span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">8</span>
<span style="color: rgba(0, 128, 128, 1)">9</span> export <span style="color: rgba(0, 0, 255, 1)">default</span> withRouter(Test)</pre>
</div>
<p>&nbsp;</p>
<p>这样才可以使用this.props.history.push等等api</p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:冰中焱,转载请注明原文链接:https://www.cnblogs.com/Blod/p/15946973.html</p><br><br>
来源:https://www.cnblogs.com/Blod/p/15946973.html
頁: [1]
查看完整版本: react中配置路由