美文网首页
react 中的 suspense 和 lazy 与 动态路由加

react 中的 suspense 和 lazy 与 动态路由加

作者: VIAE | 来源:发表于2020-08-04 18:44 被阅读0次

为了优化用户第一次打开首页的速度,很多人都会选择webpack按路由分包js文件,每个路由对应的component懒加载,也就是说只有当用户访问到该路由时,才会加载该模块,这样有效的避免了用户首次进入首页时一次下载所有资源的等待时长。
这里我们使用的是react里面的suspense和lazy。
页面比较多,使用了动态路由加载的方式
话不多说,上代码
(不需要太多自定义功能的话可以直接用 react-router-config(https://github.com/cherijs/react-router-config
),路由渲染这部分就不用自己另外再写了)

renderRoutesMap.js

import React, {lazy,Suspense} from 'React';
import {Route} from 'react-router-dom';

const RenderRoutesMap = (routes) => (
  const LazyComponent = lazy(route.component);
  routes.map((route,index) => {
    return(
      <Route key={index} exact = {route.exact} path={route.path} render={props =>(
        <Suspense>
          <LazyComponent  {...props}/>
        </Suspense>
      )}/>
    )
  })
)

export default RenderRoutesMap

renderRoutes.js

import RenderRoutesMap from './renderRoutesMap'
import  {ConnectedRouter} from 'connected-react-router';
import {PropType} from 'prop-types'

RenderRoutes.propTypes = {
  routes: PropTypes.array.isRequired,
  extraProps: PropTypes.object.isRequired,
  switchProps: PropTypes.object.isRequired,
} 

const RenderRoutes = ({routes, extraProps = {}, switchProps = {} }) => (
  <ConnectedRouter {...extraProps}>
    <Switch {...switchProps}>
      {RenderRoutesMap(routes)}
    </Switch>
  </ConnectedRouter>
)

export default RenderRoutes

routes.js

import RenderRoutes from './renderRoutes'

const router = (routerConfig, routerProps) => (
  renderRoutes({
    routes; routerConfig,
    extraProps:routerProps
  })
)
export default Routes

使用
index.js

import Routes from './routes'
import Home from './home'
import Test from './test'

const routers = [
  {
    path: '/home',
    exact: true,
    component: Home
  },
{
    path: '/test',
    exact: true,
    component: Test
  }
]

return(
  <Routes />
)

相关文章

  • react18 useRoutes嵌套路由及懒加载

    之前写过react16的嵌套路由及懒加载的方案react 中的 suspense 和 lazy 与 动态路由加载[...

  • react 中的 suspense 和 lazy 与 动态路由加

    为了优化用户第一次打开首页的速度,很多人都会选择webpack按路由分包js文件,每个路由对应的component...

  • 最佳实践React性能优化

    1: React.lazy和React.Suspense封装dynamic函数动态引入组件 1:基本使用 2:la...

  • 2022-05-11

    React suspense 与 lazy 结合 最近给页面增加骨架屏功能,使用了React的suspense功能...

  • React 中的 suspense 和 lazy

    我们通过 webpack 或是 rollup 这样工具可以将项目多个 JavaScript 文件最终打包成为一个 ...

  • react 16.6 懒加载 Lazy

    react 16.6 发布了新的功能 lazy ,和一个组件 Suspense 下面我们看一下他的用法 首先我们先...

  • React 新特性 lazy&Suspense 及相关错误处理

    lazy&Suspense 基本使用 JS 模块延时加载,做代码拆分 使用 React生命周期 拦截组件加载失败 ...

  • React中使用Suspense、lazy

    先升级react的版本,一定要在16.6以后的版本才可以使用。main.js test.js 这样就可以实现一个懒...

  • 高级

    代码切割 懒加载 React.lazy React.lazy 目前只支持默认导出 异常捕获边界 基于路由的代码分割...

  • React v16 Fiber

    React在v16推出了很多让我很惊喜的新特性:memo,lazy,Suspense,Hook等当然,其中最让我惊...

网友评论

      本文标题:react 中的 suspense 和 lazy 与 动态路由加

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