美文网首页
React---实战项目(二)

React---实战项目(二)

作者: 陆秋明v | 来源:发表于2020-11-21 14:52 被阅读0次

    搭建项目的基本与外层路由

    01、配置基本页面

    图片.png
    • 1-1、建立这些文件夹 在这些文件夹中穿件 index.js这个文件 然后 在文件里 穿件 组件
    • 1-2、 然后在views/index.js里面 对组件进行引入和暴露
    import ArticleList from './article/index'
    import ArticleEdit  from './article/Edit'
    import Dashboard    from './dashboard'
    import Login from  './login'
    import Settings  from './settings'
    import Notfind from './notfind'
    
    export {
        ArticleList,
        ArticleEdit,
        Dashboard,
        Login,
        Settings,
        Notfind
    }
    

    02、需要进行路由配置

    • 2-1 配置rotues/index.js 文件

      创建文件 图片.png
      然后在里面引入 组件
    import {
        ArticleList,
        ArticleEdit,
        Dashboard,
        Login,
        Settings,
        Notfind
    } from '../views
    
    • 2-1 开始配置路由 配置两种路由,一种是只有一个一级路由的,第二种是一级路由下有多个子路由,将路由配置成数组,使用的时候遍历(仅仅对于数量较多的时候使用)
    export const adminRoute = [
        { pathname: '/admin/dashboard', component: Dashboard },
        { pathname: '/admin/article', component: ArticleList ,exact: true},
        { pathname: '/admin/article/edit', component: ArticleEdit},
        { pathname: '/admin/settings', component: Settings }
    ]
    
    //配置第二种路由  一级路由
    export const mainRoute = [
        { pathname: '/login', component: Login },
        { pathname: '/404', component: Notfind }
    ]
    

    这样路由就配置完成了,

    03、 外层路由的搭建

    • 3-1 首先需要一个 插件 react-router-dom 这个插件
      yarn add react-router-dom 安装---
    • 3-2 需要引入我们的一级路由 和这个插件的一些模块
    import {
      HashRouter as Router,
      Route, Redirect, Switch
    } from 'react-router-dom'
    import { mainRoute } from './router'
    

    第一个模块 HashRouter as Router: 说的是使用的是hash模式,并且给 HashRouter起了一个名字,叫 Router 这个名字可以随便起,但是,相信你不是一个随便的人。还有一种是 BrowserRouter 这代表了 另一个路由模式 history 模式 ,hash模式和 history 模式主要的区别就是hash模式的url 上有# 另一个没有 ,但是没有那个更麻烦,因为在上线的时候,可能后爆404页面 处理方法:

    图片.png
    第二个模块 Redirect 是用来重定向的,
    第三个模块Switch 是为了方式 Route 穿透的,只有被Switch包裹后,才不会匹配后,最终走到了最后一个Route里面
    ReactDOM.render(
      <Router>
        <Switch>
          <Route path='/admin' component={App} />
          {
            mainRoute.map(route => {
              return <Route key={route.pathname}
                path={route.pathname} component={route.component}
              />
            })
          }
          <Redirect to='/admin' from='/' exact />
          <Redirect to='/404' />
        </Switch>
      </Router>
      ,
      document.getElementById('root')
    );
    
    • 3-3 这样一级路由就搞好了

    04、 内存路由的搭建

    • 4-1 解决二级路由问题
      还是要先引入 二级路由 还有 react-router-dom这个插件
    import {Route,Redirect,Switch} from 'react-router-dom'
    import {adminRoute} from '../src/router'
    
    export default class App extends Component {
      render() {
        return (
          <Switch>
            {
            adminRoute.map(route=>{
              return <Route key={route.pathname}  exact={route.exact}
        //这样遍历的时候,如果 exact只有是true的时候,才进行完全匹配
              path={route.pathname} component={route.component}/>
            })
            }
            <Redirect to={adminRoute[0].pathname} from='/admin' exact/>
            <Redirect to='/404'/>
          </Switch>
        )
      }
    }
    
    • 4-2 和一级路由用法很相似 ,但是又一点是 如果 匹配到/admin/article 就不会匹配 /admin/article/edit了,所有要在router/index 里面添加参数 { pathname: '/admin/article', component: ArticleList ,exact: true}, 添加了exact:true 这个参数,就只能匹配/admin/article了, exact这个参数的意思是完全匹配

    05、路由懒加载

    介绍:路由懒加载是防止路由组件过多,一次加载的时候,造成浏览器的卡顿,网页速度打开过慢。使用路由懒加载的好处:可以通过路由懒加载,对于路由组件按需添加,这样可以提高浏览器的大块速度,提高用户体验。

    • 5-1 配置一个 Loading 组件 图片.png
    • 5-2 首先需要 下载一个插件 [yarn add react-loadable] 点击一下

    • 5-3 下载完了就可以使用了

    //将以前的 引入注释掉
    // import ArticleList from './article/index'
    // import ArticleEdit  from './article/Edit'
    //使用路由懒加载
    // 路由懒加载 将所有组件分开  按需加载
    import Loadable from  'react-loadable'
    import Loading from '../components/loading'
    const ArticleList = Loadable({
       loader:()=>import('./article/index'),
       loading:Loading
    //如果 没有加载出来 就会跳到Loading这个组件上,直到加载出来
    })
    const ArticleEdit = Loadable({
       loader:()=>import('./article/edit'),
       loading:Loading
    })
    //正常暴露出去
    export {
       ArticleList,
       ArticleEdit,
    }
    
    

    相关文章

      网友评论

          本文标题:React---实战项目(二)

          本文链接:https://www.haomeiwen.com/subject/gwpkiktx.html