react基础react-router-dom的基本使用,和react-loadable结合react-router-dom中withRouter实现异步加载组件,提升性能

1、安装react-router-dom,使用路由器BrowserRouter, 路由Route,还有Switch用于处理意外页面

import React, { Component, Fragment } from 'react';
import Header from './component/Header'
import store from './store'
import { Provider } from "react-redux"
// 单个react-loadable进行异步组件
// import Home from './pages/Home/loadable'
// import Details from './pages/Details/loadable'
// 封装使用react-loadable进行异步组件
import loadable from './util/loadable'
import Error from './pages/Error'
import MainLayout from './pages/MainLayout'
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
// BrowserRouter 路由器 
// Route 路由 上的 exact属性 是精确匹配的意思, exact的值为bool型,为true表示严格匹配,为false时为正常匹配
// Switch 用来处理 404 页面
// 封装使用react-loadable进行异步组件
const Home = loadable(() => import('./pages/Home'))
const Details = loadable(() => import('./pages/Details'))
// 嵌套路由的使用
// const MainLayout = loadable(() => import('./pages/MainLayout'))
const SubRouterHome = loadable(() => import('./pages/SubRouterHome'))
class App extends Component {
  // eslint-disable-next-line no-useless-constructor
  constructor(props) {
    super(props)
  }

  render() {
    return (
      
        
          
{/* 通过url传递参数 */} {/* 嵌套路由 */} {/* }> */} {/* Switch用来处理404,错误页面必须在最后面 */}
) } } export default App;

2、Router 通过path来接收组件的路由,并且,通过路由传递参数,eg: /detail/:id,在跳转到的组件页面通过this.props.match来获取传递过来的参数,exact为精确匹配,取值有ture和false, component接收跳转到的组件

3、使用react-loadable来异步加载组件,可以节约资源,将其封装调用

import React from 'react'
import Loadable from 'react-loadable' // 异步加载组件,可以加快首屏加载速度

// 通用的过场组件
const loadingComponent = () => {
    return (
        
正在加载...
) } export default (loader, loading = loadingComponent) => { return Loadable({ loader, loading }) }

4、函数式路由跳转、Link组件和withRouter的使用,其次,react-router-dom还有NavLink等组件的使用方式

import React, { PureComponent, Fragment } from 'react'
import { DetailsCard } from './style'
import { Link, withRouter } from 'react-router-dom'
class Details extends PureComponent {
    // eslint-disable-next-line no-useless-constructor
    constructor(props) {
        super(props)
    }

    componentDidMount() {
        console.log('获取传递过来的路由参数' + JSON.stringify(this.props.match.params));

    }

    render() {
        const { match } = this.props
        return (
            
                 详情页 获取到的路由参数 ------ {match.params.id}
                去首页
                
) } } export default withRouter(Details)

 

你可能感兴趣的:(react)