首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在next.config.js中完全禁用Next.js中的预取

如何在next.config.js中完全禁用Next.js中的预取
EN

Stack Overflow用户
提问于 2022-10-12 08:11:16
回答 1查看 292关注 0票数 -1

在大多数示例中,为了禁用预取,它们通过禁用用于预取的特定链接来禁用预取,请参见以下示例:

代码语言:javascript
复制
<Link href="/about" prefetch={false}>
  <a>About us</a>
</Link>

我想将整个项目的预取设置为false。在next.config.js文件中有此设置吗?

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 08:22:44

不幸的是,在Next.js中,它不支持全局disable预取。

第一个解决办法

  1. 在您的项目中创建一个本地的Babel插件,它在任何地方都添加了prefetch={false},我们从'next/link'中使用<Link />
代码语言:javascript
复制
/**
 * Based on the docs at https://nextjs.org/docs/api-reference/next/link, the
 * only way to disable prefetching is to make sure every <Link /> has <Link
 * prefetch={false} />
 *
 * We don't want to create a wrapper Component or go around changing every
 * single <Link />, so we use this Babel Plugin to add them in at build-time.
 */
module.exports = function (babel) {
  const { types: t } = babel
  return {
    name: 'disable-link-prefetching',
    visitor: {
      JSXOpeningElement(path) {
        if (path.node.name.name === 'Link') {
          path.node.attributes.push(
            t.jSXAttribute(
              t.jSXIdentifier('prefetch'),
              t.JSXExpressionContainer(t.booleanLiteral(false)),
            ),
          )
        }
      },
    },
  }
}
  1. 添加/修改./..babelrc以加载本地插件:
代码语言:javascript
复制
{
  "presets": ["next/babel"],
  "plugins": ["./babel/disable-nextjs-link-prefetching"]
}

第二个解决办法

创建一个自定义链接组件,并为此使用prefetch={false},并使用它而不是直接使用next/link

代码语言:javascript
复制
import Link from 'next/link'

export default function MyLink(props) {
  // defaults prefetch to false if `prefetch` is not true
  return <Link {...props} prefetch={props.prefetch ?? false}>
}

资源

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74038516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档