预加载页面

⚠️ 只有生产环境才有此功能 ⚠️

Examples

Next.js 有允许你预加载页面的 API。

用 Next.js 服务端渲染你的页面,可以达到所有你应用里所有未来会跳转的路径即时响应,有效的应用 Next.js,可以通过预加载应用程序的功能,最大程度的初始化网站性能。查看更多.

Next.js 的预加载功能只预加载 JS 代码。当页面渲染时,你可能需要等待数据请求。

你可以给添加 prefetch 属性,Next.js 将会在后台预加载这些页面。

  1. import Link from 'next/link'
  2.  
  3. // example header component
  4. export default () =>
  5. <nav>
  6. <ul>
  7. <li>
  8. <Link prefetch href="/">
  9. <a>Home</a>
  10. </Link>
  11. </li>
  12. <li>
  13. <Link prefetch href="/about">
  14. <a>About</a>
  15. </Link>
  16. </li>
  17. <li>
  18. <Link prefetch href="/contact">
  19. <a>Contact</a>
  20. </Link>
  21. </li>
  22. </ul>
  23. </nav>

命令式 prefetch 写法

大多数预加载是通过处理的,但是我们还提供了命令式 API 用于更复杂的场景。

  1. import { withRouter } from 'next/router'
  2.  
  3. export default withRouter(({ router }) =>
  4. <div>
  5. <a onClick={() => setTimeout(() => router.push('/dynamic'), 100)}>
  6. A route transition will happen after 100ms
  7. </a>
  8. {// but we can prefetch it!
  9. router.prefetch('/dynamic')}
  10. </div>
  11. )

路由实例只允许在应用程序的客户端。以防服务端渲染发生错误,建议 prefetch 事件写在componentDidMount()生命周期里。

  1. import React from 'react'
  2. import { withRouter } from 'next/router'
  3.  
  4. class MyLink extends React.Component {
  5. componentDidMount() {
  6. const { router } = this.props
  7. router.prefetch('/dynamic')
  8. }
  9.  
  10. render() {
  11. const { router } = this.props
  12. return (
  13. <div>
  14. <a onClick={() => setTimeout(() => router.push('/dynamic'), 100)}>
  15. A route transition will happen after 100ms
  16. </a>
  17. </div>
  18. )
  19. }
  20. }
  21.  
  22. export default withRouter(MyLink)