Vue Router 支持开箱即用的动态导入,这意味着你可以用动态导入代替静态导入:
const UserDetails = () => import('./views/UserDetails')
const router = createRouter({
routes: [{ path: '/users/:id', component: UserDetails }],
})
component (和 components) 配置接收一个返回 Promise 组件的函数,Vue Router 只会在第一次进入页面时才会获取这个函数,然后使用缓存数据。
一般来说,对所有的路由都使用动态导入是个好主意。
注意:不要在路由中使用异步组件。异步组件仍然可以在路由组件中使用,但路由组件本身就是动态导入的。
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() =>
import('./components/MyComponent.vue')
)
使用的是 webpack 之类的打包器,组件 import 将自动代码分割。返回值是 Promise 这时不是组件了,但是 Vue Router 支持开箱即用的动态导入,内部已经做好了支持。
但是下面这里是一个 React 的例子,展示如何在你的应用中使用 React.lazy 和 React Router 这类的第三方库,来配置基于路由的代码分割。
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));
const App = () => (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Suspense>
</Router>
);
由于 React Router 没有支持动态导入,所以直接使用 import 语法是不可以的,必须借助 React.lazy 函数能让你像渲染常规组件一样处理动态引入(的组件)
|