🚀 概述
Nuxt 4.0 是一个重大版本更新,引入了多个重要的新 API 和功能增强,主要包括 Nitro 引擎的全面升级、新的 Composable API、以及改进的开发体验。本文档重点介绍这些新 API 的使用方法和实际应用场景。
🆕 新 API 特性
Nitro 引擎全面升级
作用:基于 H3 的下一代服务器引擎,提供更快的性能和更好的开发体验。
API 变更:
// nuxt.config.ts
export default defineNuxtConfig({
// 新的 Nitro 配置
nitro: {
// 新的预设选项
preset: "node-server", // 或 'vercel', 'netlify', 'cloudflare'
// 新的路由处理
routeRules: {
"/api/**": {
cors: true,
headers: { "access-control-allow-methods": "GET" },
},
"/admin/**": { auth: true },
},
// 新的存储 API
storage: {
redis: {
driver: "redis",
url: process.env.REDIS_URL,
},
},
},
});
使用场景:
- 高性能 API 开发
- 多平台部署(Vercel、Netlify、Cloudflare)
- 需要复杂路由规则的应用
新的 Composable API
作用:提供更强大的组合式函数,简化状态管理和数据获取。
useAsyncData 增强
新增功能:支持更灵活的缓存策略和错误处理。
API 使用:
// 新的 useAsyncData API
const { data, pending, error, refresh } = await useAsyncData(
"users",
() => $fetch("/api/users"),
{
// 新的缓存选项
cache: {
key: "users-list",
ttl: 60 * 60 * 1000, // 1小时
maxAge: 60 * 60 * 1000,
},
// 新的错误处理
onError: (error) => {
console.error("获取用户数据失败:", error);
},
// 新的转换函数
transform: (users) =>
users.map((user) => ({
...user,
fullName: `${user.firstName} ${user.lastName}`,
})),
}
);
使用场景:
- 复杂的数据获取逻辑
- 需要缓存优化的应用
useLazyAsyncData API
新功能:提供懒加载数据的能力,提升页面性能。
API 使用:
// 懒加载数据
const { data, pending, error, execute } = useLazyAsyncData(
"user-profile",
() => $fetch("/api/user/profile"),
{
immediate: false, // 不立即执行
server: false, // 仅在客户端执行
watch: false, // 不监听依赖变化
}
);
// 手动触发数据获取
const loadProfile = () => {
execute();
};
使用场景:
- 按需加载数据
- 提升首屏加载速度
新的路由 API
作用:提供更灵活的路由控制和页面导航。
navigateTo 增强
新功能:支持更多导航选项和外部链接处理。
API 使用:
// 新的 navigateTo API
const router = useRouter();
// 基础导航
await navigateTo("/about");
// 带查询参数
await navigateTo({
path: "/search",
query: { q: "nuxt 4", page: 1 },
});
// 外部链接
await navigateTo("https://nuxt.com", { external: true });
// 替换当前历史记录
await navigateTo("/new-page", { replace: true });
// 带状态
await navigateTo("/checkout", {
state: { from: "product-page" },
});
使用场景:
- 复杂的页面导航逻辑
- 外部链接处理
useRoute 增强
新功能:提供更丰富的路由信息访问。
API 使用:
// 新的 useRoute API
const route = useRoute();
// 访问路由参数
console.log("用户ID:", route.params.id);
// 访问查询参数
console.log("搜索关键词:", route.query.q);
// 访问路由元数据
console.log("页面标题:", route.meta.title);
// 检查当前路由
const isActive = computed(() => route.path === "/dashboard");
// 路由变化监听
watch(
() => route.path,
(newPath, oldPath) => {
console.log("路由变化:", oldPath, "->", newPath);
}
);
使用场景:
- 路由状态管理
- 导航守卫实现
新的状态管理 API
作用:提供更强大的状态管理能力,支持持久化和跨组件共享。
useState 增强
新功能:支持持久化存储和跨页面状态共享。
API 使用:
// 新的 useState API
const counter = useState("counter", () => 0);
// 持久化状态
const user = useState("user", () => null, {
persist: true, // 持久化到 localStorage
deep: true, // 深度响应式
});
// 跨页面状态
const theme = useState("theme", () => "light", {
persist: true,
default: "light",
});
// 服务器端状态
const serverData = useState("server-data", () => ({
timestamp: Date.now(),
version: "4.0.0",
}));
使用场景:
- 全局状态管理
- 跨页面数据共享
useCookie 增强
新功能:提供更灵活的 Cookie 管理。
API 使用:
// 新的 useCookie API
const token = useCookie("auth-token", {
default: () => null,
maxAge: 60 * 60 * 24 * 7, // 7天
secure: true,
sameSite: "strict",
httpOnly: false, // 客户端可访问
});
// 设置 Cookie
token.value = "new-token-value";
// 删除 Cookie
token.value = null;
// 响应式 Cookie
const userPrefs = useCookie("user-preferences", {
default: () => ({
theme: "light",
language: "zh-CN",
notifications: true,
}),
});
使用场景:
- 用户认证
- 跨会话数据存储
新的插件 API
作用:提供更强大的插件开发能力,支持新的生命周期钩子。
新功能:defineNuxtPlugin 增强,支持更多插件选项和生命周期钩子。
API 使用:
// 新的 defineNuxtPlugin API
export default defineNuxtPlugin({
name: "my-plugin",
enforce: "pre", // 或 'post'
setup(nuxtApp) {
// 插件设置
console.log("插件已加载");
// 提供全局属性
nuxtApp.provide("myUtil", {
formatDate: (date) => new Date(date).toLocaleDateString(),
generateId: () => Math.random().toString(36).substr(2, 9),
});
// 钩子函数
nuxtApp.hook("app:created", () => {
console.log("应用已创建");
});
nuxtApp.hook("page:start", () => {
console.log("页面开始加载");
});
nuxtApp.hook("page:finish", () => {
console.log("页面加载完成");
});
},
});
使用场景:
- 第三方库集成
- 性能监控和日志
新的服务器 API
作用:提供更强大的服务器端功能,支持新的 API 路由和中间件。
defineEventHandler 增强
新功能:支持更丰富的请求处理和响应选项。
API 使用:
// 新的 defineEventHandler API
export default defineEventHandler(async (event) => {
// 获取请求方法
const method = getMethod(event);
// 获取查询参数
const query = getQuery(event);
// 获取请求体
const body = await readBody(event);
// 获取请求头
const headers = getHeaders(event);
// 设置响应头
setHeaders(event, {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
});
// 设置 Cookie
setCookie(event, "session", "user-session-id", {
httpOnly: true,
maxAge: 60 * 60 * 24,
});
// 返回响应
return {
success: true,
data: { message: "Hello from Nuxt 4!" },
timestamp: Date.now(),
};
});
使用场景:
- 复杂的 API 逻辑
- 需要认证的端点
- 数据处理和转换
defineNitroPlugin 增强
新功能:支持 Nitro 插件开发,提供服务器端扩展能力。
API 使用:
// 新的 defineNitroPlugin API
export default defineNitroPlugin((nitroApp) => {
// 添加中间件
nitroApp.hooks.hook("request", (event) => {
console.log("请求开始:", event.path);
});
nitroApp.hooks.hook("response", (event) => {
console.log("响应完成:", event.path);
});
// 添加错误处理
nitroApp.hooks.hook("error", (error, event) => {
console.error("服务器错误:", error);
});
// 添加自定义路由
nitroApp.router.add("/custom", (event) => {
return { message: "自定义路由" };
});
});
使用场景:
- 服务器端中间件
- 错误处理和日志
- 自定义路由逻辑
新的开发工具 API
作用:提供更好的开发体验和调试能力。
新功能:useDevTools 增强,支持自定义开发工具面板和调试信息。
API 使用:
// 新的 useDevTools API
export default defineNuxtPlugin(() => {
const devtools = useDevTools();
// 添加自定义面板
devtools.addPanel({
name: "my-panel",
title: "我的面板",
icon: "carbon:settings",
view: {
type: "iframe",
src: "/devtools/my-panel",
},
});
// 添加调试信息
devtools.addInspector({
name: "my-inspector",
title: "我的检查器",
icon: "carbon:code",
inspector: {
type: "component",
component: "MyInspector",
},
});
});
使用场景:
- 自定义调试工具
- 性能监控
🔧 常见问题解决
问题 1:迁移兼容性
// ❌ Nuxt 3 写法
export default {
async setup() {
const { data } = await useFetch("/api/data");
return { data };
},
};
// ✅ Nuxt 4 写法
const { data } = await useFetch("/api/data");
问题 2:状态持久化
// ❌ 旧的状态管理
const state = reactive({
user: null,
settings: {},
});
// ✅ 新的状态管理
const user = useState("user", () => null, { persist: true });
const settings = useState("settings", () => ({}), { persist: true });
问题 3:API 路由处理
// ❌ 旧的错误处理
export default defineEventHandler((event) => {
try {
// 处理逻辑
} catch (error) {
return { error: error.message }
}
})
// ✅ 新的错误处理
export default defineEventHandler(async (event) => {
try {
// 处理逻辑
} catch (error) {
throw createError({
statusCode: 500,
statusMessage: error.message
})
}
})
📋 总结
- Nitro 引擎全面升级 – 基于 H3,支持多平台部署
- 增强的 Composable API – useAsyncData、useLazyAsyncData、useFetch 功能更强大
- 改进的状态管理 – useState 支持持久化,useCookie 更灵活
- 增强的路由控制 – navigateTo 和 useRoute 功能更丰富
- 强大的插件系统 – defineNuxtPlugin 和 defineNitroPlugin 支持更多场景
- 更好的开发体验 – useDevTools 支持自定义调试工具
这些新特性让 Nuxt 4.0 成为开发现代 Web 应用的强大工具,提供了更好的性能、更灵活的 API 和更优秀的开发体验。
评论0