美文网首页
踩坑记录——React.lazy

踩坑记录——React.lazy

作者: Marshall3572 | 来源:发表于2021-07-16 19:32 被阅读0次

项目背景:一个页面内嵌三个页面组件,试图使用React.lazy懒加载实现分包加载性能优化,
原本使用的是alias export,引入失败。
经查官方文档和mentor讲解,用lazy懒加载的组件必须使用default export导出
React.lazy官方文档

问题解决。

可是就止步于此了吗,如果我就想用alias export导出该怎么办呢?

首先我们需要找出alias export和default export的不同,经控制台测试如下图 default export多了个default对象,那我们能否给alias export构造一个default属性来骗过React.lazy的检查呢?

从上图可以看出,import('')方法返回的是一个Promise,于是

const History = lazy(() => import('./pages/History').then(res => ({default:res.History})))
大功告成

经检验和实际预览效果,骗过了React.lazy。
不过这种方法只是技术层面的尝试,写法过于复杂,还是老老实实用export default吧

ps: 记得添加suspense和fallback机制,让分包加载的时候显示loading的状态

import React, {Suspense, lazy} from 'react'
import './App.css'
import {Header} from './components/Header'
import {Footer} from './components/Footer'
import {Loading} from './components/Loading'
import {Switch, Route} from 'react-router-dom'

// import {Home} from './pages/Home'
// import {History} from './pages/History'
// import {About} from './pages/About'
const Home = lazy(() => import('./pages/Home'))
  // .then(res => ({default: res.History} ) )
const History = lazy(() => import('./pages/History'))
const About = lazy(() => import('./pages/About'))

function App() {
  // .then(res => ({default:res.History}))
  // console.log('alias导出:',import('./pages/History').then(res => ({default:res.History})))
  // console.log('default导出:',import('./pages/Home'))
  return (
    <div className="app">
      <Header/>
      <main>
        <Suspense fallback={<Loading/>}>
          <Switch>
            {/*exact表示严格匹配模式,加了后代就无法匹配自己*/}
            <Route path="/" exact component={Home}/>
            <Route path="/history" component={History}/>
            <Route path="/about" component={About}/>
          </Switch>
        </Suspense>
      </main>
      <Footer/>
    </div>
  )
}

export default App

相关文章

  • 踩坑记录——React.lazy

    项目背景:一个页面内嵌三个页面组件,试图使用React.lazy懒加载实现分包加载性能优化,原本使用的是alias...

  • 2020-10-19随笔 踩坑0传值

    踩坑:当值传入0时,if条件判断时候会自己转换,记录踩坑。

  • Weex入门踩坑记录

    Weex入门踩坑记录

  • Flutter 开发记录

    Flutter 开发踩坑记录(干货总结)

  • 日常bug记录

    想记录日常碰到的bug,坑踩多了,以后应该碰到坑就比较容易处理或者会少踩坑,后面会慢慢记录bug,截图bug以及最...

  • 没事请多踩踩坑!

    人生事不尽意,别人挖坑我踩坑。 请在这里留下你的踩坑记录,让别人少入坑。

  • Windows下GithubPages博客快速搭建

    Windows下开发坑总是比较多的,但是本人没Mac,只好踩一遍坑记录下。本文主要是安装过程&踩坑记录,故不对细节...

  • Retrofit Https踩坑记录

    Retrofit Https踩坑记录 前言 新司机上路,坑多,本文重点是踩坑,不详细讲retrofit用法,本文不...

  • 个人博客标签分类

    【小结】零碎的小结 【踩坑记录】报错等记录,防止再度踩坑 【总结】比较完整的总结 【想法】自己的一些想法和推论 【...

  • 踩坑记录

    如果当前页面是push出的页面,切换根视图控制器没问题;如果当前页面是present出的页面,切换跟视图控制器之前...

网友评论

      本文标题:踩坑记录——React.lazy

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