\n {products.map((product: any) => (\n
\n
{product.name}
\n
${product.price}
\n
\n ))}\n
\n );\n}\n```\n\n### Using Advanced Cache APIs (New in v16)\n\n```typescript\n// app/actions/update-product.ts\n\"use server\";\n\nimport { revalidateTag, updateTag, refresh } from \"next/cache\";\n\nexport async function updateProduct(productId: string, data: any) {\n // Update the product\n const res = await fetch(`https://api.example.com/products/${productId}`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(data),\n next: { tags: [`product-${productId}`, \"products\"] },\n });\n\n if (!res.ok) {\n return { error: \"Failed to update product\" };\n }\n\n // Use new v16 cache APIs\n // updateTag: More granular control over tag updates\n await updateTag(`product-${productId}`);\n\n // revalidateTag: Revalidate all paths with this tag\n await revalidateTag(\"products\");\n\n // refresh: Force a full refresh of the current route\n await refresh();\n\n return { success: true };\n}\n```\n\n### React 19.2 View Transitions\n\n```typescript\n// app/components/navigation.tsx\n\"use client\";\n\nimport { useRouter } from \"next/navigation\";\nimport { startTransition } from \"react\";\n\nexport function Navigation() {\n const router = useRouter();\n\n const handleNavigation = (path: string) => {\n // Use React 19.2 View Transitions for smooth page transitions\n if (document.startViewTransition) {\n document.startViewTransition(() => {\n startTransition(() => {\n router.push(path);\n });\n });\n } else {\n router.push(path);\n }\n };\n\n return (\n