发布于 2026-01-06 5 阅读
0

掌握 Next.js 的 5 个必备技巧和窍门

掌握 Next.js 的 5 个必备技巧和窍门

亲爱的网络朋友们,大家好!今天的博客,我们将深入探讨使用 Next.js 的五个关键技巧。关于缓存、渲染客户端组件等概念,大家仍然存在很多困惑,所以我将在这里分享一些宝贵的见解,帮助你更流畅、更高效地进行 Next.js 开发。

现在,让我们来看看具体技巧!

技巧 1:在 Next.js 中处理图像

本地图像
Next.js 中一个常见的混淆领域是图像处理,特别是本地图像和远程图像之间的区别。

对于存储在public文件夹中的本地图像,您无需指定宽度和高度。Next.js 会自动识别这些属性。

例子:

import Image from 'next/image';
import myImage from '../public/ahoy.jpg';

export default function Home() {
  return (
    <div>
      <Image src={myImage} alt="Ahoy" />
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

远程图像
对于远程图像,您需要提供宽度、高度和模糊数据等附加信息,以提高加载性能并避免内容布局偏移。

例如:
要为远程图像添加模糊效果,请使用sharpandplaceholder包生成 base64 编码的模糊数据。

1.安装软件包:

npm install sharp placeholder
Enter fullscreen mode Exit fullscreen mode

2.创建一个实用函数:

import placeholder from 'placeholder';
import sharp from 'sharp';

export async function getBase64(url) {
  const res = await fetch(url);
  const buffer = await res.arrayBuffer();
  const base64 = await placeholder(buffer);
  return base64;
}
Enter fullscreen mode Exit fullscreen mode

3.在组件中使用该函数:

import { getBase64 } from './utils/getBase64';

export default async function Home() {
  const blurData = await getBase64('https://source.unsplash.com/random');
  return (
    <Image
      src="https://source.unsplash.com/random"
      width={800}
      height={600}
      alt="Random"
      placeholder="blur"
      blurDataURL={blurData}
    />
  );
}
Enter fullscreen mode Exit fullscreen mode

提示 2:环境变量

使用环境变量时,请注意其NEXT_PUBLIC_前缀。带有此前缀的变量会暴露给浏览器,使其可在客户端代码中访问。这对于公共设置很有用,但如果用于 API 密钥等敏感信息,则可能存在安全风险。

  • 公共变量:带有前缀NEXT_PUBLIC_并暴露给客户端。
  • 私有变量:不带前缀,保存在服务器端。

例子:

NEXT_PUBLIC_API_URL=https://api.example.com
API_SECRET_KEY=your-secret-key
Enter fullscreen mode Exit fullscreen mode

技巧 3:Next.js 中的缓存

Next.js 的缓存行为在开发环境和生产环境之间可能存在很大差异。

开发阶段:
在开发过程中,页面会动态刷新,立即反映更改。

生产环境:
Next.js 默认会尝试将页面渲染为静态页面。要控制此行为,请使用revalidate增量静态页面重新生成或force-dynamic始终获取最新数据的选项。

例子:

// Revalidate every 5 seconds
export const revalidate = 5;

// Force dynamic data fetching
export const dynamic = 'force-dynamic';
Enter fullscreen mode Exit fullscreen mode

技巧 4:高效获取数据

避免在服务器组件中使用 API 路由处理程序来获取数据。而是直接在服务器组件中获取数据。这种方法可以利用 Next.js 的优化和缓存机制。

例子:

// Direct fetch in a server component
export default async function Home() {
  const res = await fetch('https://api.example.com/jokes/random');
  const data = await res.json();
  return <div>{data.joke}</div>;
}
Enter fullscreen mode Exit fullscreen mode

对于可重用的获取逻辑,创建服务器操作并在需要的地方导入它们。

// server/getJoke.js
import { server } from 'next/server';

export async function getJoke() {
  const res = await fetch('https://api.example.com/jokes/random');
  const data = await res.json();
  return data;
}

// Home.js
import { getJoke } from '../server/getJoke';

export default async function Home() {
  const joke = await getJoke();
  return <div>{joke.joke}</div>;
}
Enter fullscreen mode Exit fullscreen mode

提示 5:客户端和服务器组件

理解客户端组件和服务器组件之间的区别至关重要。默认情况下,页面是服务器组件,但您可以在页面中包含客户端组件以实现交互功能。

例子:

// Client component
'use client';
import { useState } from 'react';

export default function ClientComponent() {
  const [count, setCount] = useState(0);

  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}

// Server component
import ClientComponent from '../components/ClientComponent';

export default function Home() {
  return (
    <div>
      <ClientComponent />
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

提供程序和子组件
当使用提供程序包装组件时(例如,为了主题化),请确保将子组件正确地视为服务器组件或客户端组件。

例子:

// theme.js
import { ThemeProvider } from 'styled-components';

export default function Theme({ children }) {
  return <ThemeProvider theme={{}}>{children}</ThemeProvider>;
}

// layout.js
import Theme from '../components/theme';

export default function Layout({ children }) {
  return (
    <Theme>
      {children}
    </Theme>
  );
}
Enter fullscreen mode Exit fullscreen mode

结论

我希望这些技巧和窍门能够帮助澄清 Next.js 中的一些常见歧义。

文章来源:https://dev.to/vyan/5-essential-tips-and-tricks-for-mastering-nextjs-1p7g