Next.js 16 Cache Components ในปี 2026: use cache, PPR และคำถามสัมภาษณ์งาน

เจาะลึก Next.js 16 Cache Components: directive use cache, Partial Pre-Rendering (PPR), cacheLife, cacheTag และคำถามสัมภาษณ์จริงสำหรับ developer ระดับ senior

Cache Components ใน Next.js 16: use cache, PPR และคำถามสัมภาษณ์งาน

Next.js 16 Cache Components เป็นการเปลี่ยนแปลงครั้งใหญ่ที่สุดในวิธีที่ Next.js จัดการกับ caching นับตั้งแต่เปิดตัว App Router โมเดลเดิมทำการ cache ทุกอย่างโดยอัตโนมัติและต้อง opt-out เมื่อไม่ต้องการ โมเดลใหม่ไม่ cache อะไรเลยโดยอัตโนมัติและต้อง opt-in ด้วย directive "use cache" ด้วย Next.js 16.3 ที่ปล่อยในเดือนสิงหาคม 2026 Cache Components ได้เพิ่ม Instant Navigations: ชุดเครื่องมือที่ทำให้แอปพลิเคชันที่ขับเคลื่อนด้วย server มีการตอบสนองเหมือน SPA

การเปลี่ยนแปลงโมเดลความคิดหลัก

Next.js 16 เปลี่ยนจาก caching โดยนัย (cache ทุกอย่าง, opt-out ด้วย dynamic APIs) เป็น caching โดยชัดแจ้ง (ไม่ cache อะไร, opt-in ด้วย "use cache") Next.js 16.3 ต่อยอดด้วย Partial Prefetching และ Instant Navigations ทำให้โมเดลที่ชัดแจ้งรู้สึกเร็วเหมือน single-page app

เหตุผลที่ Next.js 16 แทนที่ Implicit Caching

โมเดล implicit caching ใน Next.js 14-15 สร้างปัญหาด้านความสามารถในการคาดการณ์ การเรียก fetch ภายใน Server Component จะถูก deduplicate และ cache โดยอัตโนมัติ แต่การที่หน้าจะเป็น static หรือ dynamic ขึ้นอยู่กับว่ามันใช้ API ตัวไหน การ debug พฤติกรรม cache ต้องเข้าใจหลายเลเยอร์ที่ซ่อนอยู่: fetch cache, full-route cache และ router cache

Next.js 16 ลบ implicit cache ทั้งสามตัว ทุกหน้าจะ render แบบ dynamic ที่เวลา request เว้นแต่จะถูกทำเครื่องหมายอย่างชัดเจนด้วย "use cache" การ export revalidate ถูกเลิกใช้ unstable_cache ถูกแทนที่ด้วย directive "use cache" ที่ compiler รู้จัก บล็อกโพสต์การเปิดตัว Next.js 16 อธิบายขอบเขตทั้งหมดของการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงนี้แลก automatic optimization เพื่อ explicit control ประสิทธิภาพอาจลดลงในตอนแรกสำหรับแอปที่พึ่งพา implicit caching แต่ประสบการณ์การ debug ดีขึ้นอย่างมาก: เนื้อหาที่ถูก cache เป็นเพราะโค้ดระบุไว้ ไม่ใช่เพราะ heuristics ของ framework

วิธีการทำงานของ Directive use cache ในสามระดับ

Directive "use cache" ทำงานในสามระดับ: file, component และ function การเลือกระดับที่เหมาะสมคือการตัดสินใจเรื่อง caching ที่สำคัญที่สุดใน Next.js 16

Caching ระดับไฟล์ ทำเครื่องหมายทุก async export ในไฟล์ว่าสามารถ cache ได้ เหมาะสำหรับหน้าที่มีเนื้อหาคงที่ทั้งหมดและไม่มีข้อมูลเฉพาะผู้ใช้

app/pricing/page.tsxtypescript
"use cache"

import { getPricingPlans } from "@/lib/data"

// Entire page is cached as a static shell
export default async function PricingPage() {
  const plans = await getPricingPlans()
  return (
    <section>
      {plans.map((plan) => (
        <PricingCard key={plan.id} plan={plan} />
      ))}
    </section>
  )
}

Caching ระดับ component ทำการ cache component แต่ละตัวภายในหน้า สิ่งนี้ทำให้ Partial Pre-Rendering เป็นไปได้: component ที่ถูก cache จะ render เข้าไปใน static shell ขณะที่ component dynamic อื่นๆ จะ stream เข้ามาที่เวลา request

components/ProductRecommendations.tsxtsx
async function ProductRecommendations({ categoryId }: { categoryId: string }) {
  "use cache"
  // categoryId becomes part of the automatic cache key
  const products = await getTopProducts(categoryId)
  return (
    <ul>
      {products.map((p) => (
        <li key={p.id}>{p.name} - {p.price}</li>
      ))}
    </ul>
  )
}

Caching ระดับ function มุ่งเป้าไปที่ function ดึงข้อมูลโดยตรง นี่คือสิ่งที่แทนที่ pattern unstable_cache เดิม

lib/data.tstypescript
import { cacheLife } from "next/cache"

export async function getArticleBySlug(slug: string) {
  "use cache"
  cacheLife("hours")
  // slug is automatically included in the cache key
  const article = await db.article.findUnique({ where: { slug } })
  return article
}

Compiler สร้าง cache key โดยอัตโนมัติจาก arguments ของ function ไม่ต้องมี array keyParts แบบ manual ไม่ต้องใช้ workaround JSON.stringify Arguments ต้องเป็น serializable (string, number, plain object) การส่ง class instance หรือ function เป็น argument จะทำให้ serialization เสียหาย

Instant Navigations ใน Next.js 16.3

Next.js 16.3 แก้ไขคำวิจารณ์ที่พบบ่อยที่สุดของ Server Components: navigation รู้สึกช้าเพราะต้องมี network roundtrip Instant Navigations แก้ปัญหานี้โดยการ prefetch shell ที่ใช้ซ้ำได้ต่อ route ไม่ใช่ต่อ link

เปิดใช้งาน Instant Navigations ด้วยสอง flag ใน next.config.ts:

next.config.tstypescript
import type { NextConfig } from "next"

const nextConfig: NextConfig = {
  cacheComponents: true,
  partialPrefetching: true,
}

export default nextConfig

ด้วย partialPrefetching: true Next.js จะแยก loading shell จากทุก route และ cache ไว้ที่ client เมื่อผู้ใช้คลิก link shell จะ render ทันทีขณะที่เนื้อหา dynamic stream เข้ามา นี่คือ pattern การตอบสนองแบบเดียวกับที่ single-page app ใช้ แต่ไม่ต้องละทิ้ง server-driven rendering

Stream, Cache หรือ Block

สำหรับแต่ละ async operation ใน route เลือก: Stream ด้วย <Suspense> (loading state ทันที), Cache ด้วย "use cache" (UI ที่ cache ไว้ทันที) หรือ Block ด้วย export const instant = false (รอ server) สองตัวเลือกแรกสร้าง instant navigations

Navigation Inspector ใน Next.js DevTools ช่วยให้หยุด navigation ที่ shell เพื่อดูว่าอะไรถูก prefetch อย่างแม่นยำ Instant Insights แสดง navigation ที่ช้าโดยอัตโนมัติระหว่างการพัฒนา เปลี่ยนให้เป็น error ที่สามารถดำเนินการได้

Partial Pre-Rendering กับ Partial Prefetching

Partial Pre-Rendering (PPR) เป็น experimental ใน Next.js 14-15 ใน Next.js 16 PPR stable แล้วและรวมเข้ากับ Cache Components โดยตรงผ่าน cacheComponents: true Next.js 16.3 ขยายเพิ่มด้วย Partial Prefetching ซึ่งเปลี่ยนวิธีที่ shell ถูกส่งไปยัง client

ก่อน 16.3 Next.js ส่ง prefetch request สำหรับทุก link ใน viewport ด้วย Partial Prefetching มันจะ prefetch หนึ่ง shell ต่อ route ยี่สิบ link chat ที่ชี้ไปที่ /chat/[id] จะ trigger หนึ่ง prefetch ไม่ใช่ยี่สิบ สิ่งนี้ลด network overhead และทำให้กลยุทธ์ prefetch คล้ายกับวิธีที่ SPA ทำ code-split ต่อ route

app/dashboard/page.tsxtsx
import { Suspense } from "react"
import { UserGreeting } from "@/components/UserGreeting"
import { StaticSidebar } from "@/components/StaticSidebar"
import { RecentActivity } from "@/components/RecentActivity"

export default function DashboardPage() {
  return (
    <div className="grid grid-cols-12 gap-6">
      {/* Cached static shell - prefetched and served instantly */}
      <StaticSidebar />

      <main className="col-span-9">
        {/* Dynamic - streams in after shell renders */}
        <Suspense fallback={<GreetingSkeleton />}>
          <UserGreeting />
        </Suspense>

        {/* Dynamic - streams independently */}
        <Suspense fallback={<ActivitySkeleton />}>
          <RecentActivity />
        </Suspense>
      </main>
    </div>
  )
}

ต้นไม้การตัดสินใจ rendering: component ที่มี "use cache" จะกลายเป็นส่วนของ static shell Component ที่ถูกห่อใน <Suspense> ที่อ่าน cookies, headers หรือข้อมูล request-specific อื่นๆ จะ stream แบบ dynamic สำหรับการ prefetch ต่อ link นอกเหนือจาก shell ให้เพิ่ม <Link prefetch={true}> ไปยัง link เฉพาะ

cacheLife Profiles: แทนที่ revalidate

การ export revalidate จาก Next.js 15 ถูกเลิกใช้แล้ว แทนที่ด้วย cacheLife() ที่ให้ profile ที่มีชื่อเพื่อควบคุมระยะเวลา cache Profile ในตัวประกอบด้วย seconds, minutes, hours, days, weeks และ max

lib/data.tstypescript
import { cacheLife } from "next/cache"

export async function getExchangeRates() {
  "use cache"
  cacheLife("minutes") // Revalidates every few minutes
  const rates = await fetch("https://api.exchangerate.host/latest")
  return rates.json()
}

export async function getCompanyInfo() {
  "use cache"
  cacheLife("weeks") // Rarely changes
  return db.company.findFirst()
}

Custom profile กำหนดใน next.config.ts:

next.config.tstypescript
import type { NextConfig } from "next"

const config: NextConfig = {
  cacheComponents: true,
  cacheLife: {
    // Custom profile for product data
    product: {
      stale: 300,      // Serve stale for 5 minutes
      revalidate: 3600, // Revalidate in background every hour
      expire: 86400,    // Hard expire after 24 hours
    },
  },
}

export default config

การรวม profile ไว้ใน configuration หมายความว่าการเปลี่ยนแปลงหนึ่งครั้งจะปรับ caching ทั่วทั้งแอป นี่คือการกำจัดค่า revalidate: 3600 ที่กระจัดกระจายใน codebase Next.js 15

กฎหนึ่งที่ต้องจำ: cacheLife() ต้องถูกเรียกใช้เพียงครั้งเดียวต่อการเรียก function Conditional caching ใช้ได้ก็ต่อเมื่อมีเพียง branch เดียวที่ถูก execute

พร้อมที่จะพิชิตการสัมภาษณ์ React / Next.js แล้วหรือยังครับ?

ฝึกฝนด้วยตัวจำลองแบบโต้ตอบ, flashcards และแบบทดสอบเทคนิคครับ

cacheTag และ updateTag สำหรับ Targeted Invalidation

หากไม่มี cacheTag() function ที่ถูก cache สามารถหมดอายุได้เฉพาะตามเวลา On-demand invalidation ต้องการการ tag cache entry และเรียก revalidateTag() หรือ updateTag() ใหม่ใน Server Action

lib/data.tstypescript
import { cacheLife, cacheTag } from "next/cache"

export async function getProductById(id: string) {
  "use cache"
  cacheTag(`product-${id}`, "products")
  cacheLife("days")
  return db.product.findUnique({ where: { id } })
}
app/actions.tstypescript
"use server"

import { updateTag } from "next/cache"

export async function updateProduct(id: string, data: ProductUpdate) {
  await db.product.update({ where: { id }, data })
  // Invalidate this specific product AND the product list
  updateTag(`product-${id}`)
  updateTag("products")
}

ความแตกต่างระหว่าง revalidateTag และ updateTag: ทั้งคู่ invalidate แต่ updateTag เป็น primitive ที่แนะนำใน Next.js 16.3 ออกแบบมาเพื่อทำงานร่วมกับโมเดล caching ใหม่ได้อย่างราบรื่น Tag รองรับได้ถึง 256 อักขระต่อ tag สูงสุด 128 tag ต่อ cache entry

กับดักของ Tag ที่หายไป

Function ที่ถูก cache โดยไม่มี cacheTag() สามารถหมดอายุได้เฉพาะตามเวลา On-demand invalidation เป็นไปไม่ได้ นี่คือสิ่งที่ง่ายต่อการพลาดระหว่างการพัฒนาในช่วงแรกและเจ็บปวดที่จะค้นพบเมื่อลูกค้ารายงานข้อมูลเก่าบน production

ความปลอดภัย: Variants ของ use cache

Directive "use cache" ค่าเริ่มต้นสร้าง shared cache การรวมกันของ argument ใดๆ จะสร้าง cache entry ที่สามารถให้บริการกับผู้ใช้ทุกคน นี่ถูกต้องสำหรับข้อมูลสาธารณะแต่อันตรายสำหรับเนื้อหาส่วนบุคคล

"use cache: private" สร้าง cache ต่อผู้ใช้ที่รวม session ปัจจุบันไว้ใน cache key สามารถเข้าถึง cookies() และ headers() อย่างปลอดภัยภายในขอบเขตที่ถูก cache

"use cache: remote" เก็บ cache ใน external storage ในสภาพแวดล้อม serverless (Vercel, AWS Lambda) cache in-memory ค่าเริ่มต้นจะหายไปเมื่อ cold start Remote caching ทำให้ cache entry คงอยู่ข้าม function instance แม้ว่าจะต้องมี network roundtrip และมักมีค่าใช้จ่ายของ platform

typescript
// WRONG: User data in shared cache - data leak risk
export async function getUserDashboard(userId: string) {
  "use cache"
  return db.user.findUnique({
    where: { id: userId },
    include: { orders: true, preferences: true },
  })
}

// CORRECT: Private cache scoped to the current user
export async function getUserDashboard() {
  "use cache: private"
  cacheLife("minutes")
  const session = await cookies()
  const userId = session.get("userId")?.value
  return db.user.findUnique({
    where: { id: userId },
    include: { orders: true, preferences: true },
  })
}

ตารางการตัดสินใจสำหรับการสัมภาษณ์:

Directiveขอบเขตใช้เมื่อ
"use cache"ใช้ร่วมกัน, ทุกผู้ใช้ข้อมูลสาธารณะ: pricing, บทความ, catalog สินค้า
"use cache: private"ต่อ user sessionข้อมูลส่วนบุคคล: dashboard, การตั้งค่า, ประวัติการสั่งซื้อ
"use cache: remote"ใช้ร่วมกัน, external storageข้อมูล high-traffic ในสภาพแวดล้อม serverless

Root Params ใน Next.js 16.3

Next.js 16.3 แนะนำ root params แก้ปัญหา prop-drilling ที่มากเกินไปสำหรับ dynamic segment ที่กำหนดไว้เหนือ root layout Root params เช่น [lang] มีผลเป็น global และจำเป็นตลอดทั้ง component tree

app/[lang]/posts/[slug]/page.tsxtsx
import { lang } from "next/root-params"

export default async function PostPage(
  props: PageProps<"/[lang]/posts/[slug]">
) {
  const { slug } = await props.params
  const language = await lang()

  return (
    <article>
      <p>Language: {language}</p>
      <p>Post: {slug}</p>
    </article>
  )
}

Root params ทำงานภายในขอบเขต use cache และเฉพาะ params ที่ถูกอ่านจริงๆ เท่านั้นที่จะกลายเป็นส่วนของ cache key นี่ทำให้ pattern internationalization สะดวกขึ้นโดยไม่ทำลายพฤติกรรม cache

การทดสอบ Instant Navigations

Helper test instant() สำหรับ Playwright ช่วยให้ assert ว่าเนื้อหาอะไรมองเห็นได้ทันทีหลังจาก navigation โดยไม่ต้องรอ network สิ่งนี้จับ regression ที่การ refactor ทำให้ navigation ช้าลงโดยไม่ตั้งใจ

e2e/instant-navigation.spec.tstypescript
import { expect, test } from "@playwright/test"
import { instant } from "@next/playwright"

test("product title is available immediately", async ({ page }) => {
  await page.goto("/products/shoes")

  // Assert what's visible without waiting for network
  await instant(page, async () => {
    await page.click('a[href="/products/hats"]')
    await expect(page.locator("h1")).toContainText("Baseball Cap")
    await expect(page.getByText("Checking inventory...")).toBeVisible()
  })

  await expect(page.getByText("12 in stock")).toBeVisible()
})

Pattern นี้ทำให้แน่ใจว่าหน้าที่ตั้งใจให้โหลดทันทียังคงทันทีตลอดการเปลี่ยนแปลงโค้ด Navigation Inspector ใน DevTools เสริมด้วยการอนุญาตให้ตรวจสอบ shell ด้วยสายตาระหว่างการพัฒนา

คำถามสัมภาษณ์งาน: Developer อาวุโสถูกถามอะไร

คำถามเหล่านี้สะท้อน pattern สัมภาษณ์จริงปี 2026 สำหรับตำแหน่ง Next.js ระดับ senior แต่ละข้อมุ่งเป้าไปที่แง่มุมเฉพาะของ Cache Components และการอัปเดต 16.3

คำถาม 1: อธิบายการเปลี่ยนจาก implicit caching เป็น explicit caching ใน Next.js 16 ทำไม framework ถึงทำการเปลี่ยนแปลงนี้?

Next.js 14-15 cache fetch call และหน้าแบบ implicit การ debug ว่าหน้าเป็น static หรือ dynamic ต้อง trace ผ่านหลายเลเยอร์ cache ที่ซ่อนอยู่ โมเดล explicit ด้วย "use cache" ทำให้ caching มองเห็นได้ใน source code การแลกเปลี่ยน: ประสิทธิภาพอาจลดลงในตอนแรกสำหรับแอปที่ migrate จาก implicit caching แต่ developer ได้รับการควบคุมและความสามารถในการคาดการณ์อย่างเต็มที่

คำถาม 2: สามขอบเขตของ "use cache" คืออะไร และเมื่อไหร่ควรใช้แต่ละอัน?

ระดับ file สำหรับหน้าที่เป็น static ทั้งหมด ระดับ component สำหรับการผสมเนื้อหาที่ cache และ dynamic ในหน้าเดียว (pattern PPR) ระดับ function สำหรับ cache operation ดึงข้อมูลเฉพาะ การเลือกขอบเขตกำหนด cache granularity และขอบเขต invalidation

คำถาม 3: Partial Prefetching ใน 16.3 แตกต่างจาก prefetching ใน 16.0 อย่างไร?

ใน 16.0 Next.js ส่ง prefetch request สำหรับทุก link ใน viewport ใน 16.3 ด้วย partialPrefetching: true มัน prefetch หนึ่ง shell ที่ใช้ซ้ำได้ต่อ route, cache ไว้ที่ client ตลอด session ยี่สิบ link ไปที่ /chat/[id] trigger หนึ่ง prefetch สำหรับ shell ของ route chat ไม่ใช่ยี่สิบ request แยกกัน สิ่งนี้ลด network overhead และสอดคล้องกับวิธีที่ SPA ทำ code-split

คำถาม 4: ทีมหนึ่ง cache function ที่ return ประวัติการสั่งซื้อของผู้ใช้ด้วย "use cache" จะเกิดอะไรขึ้น?

Shared cache เก็บผลลัพธ์ด้วย key ตาม function arguments ถ้า function รับ parameter userId ผู้ใช้ต่างกันจะได้ cache entry ต่างกัน แต่ cache ยังคงเป็น shared infrastructure ถ้า function อ่าน userId จาก cookies() แทนที่จะเป็น parameter build จะ fail เพราะ cookies() เป็น runtime API ที่ห้ามใช้ในขอบเขต shared cache วิธีแก้: เปลี่ยนเป็น "use cache: private" หรือส่ง user ID เป็น argument อย่างชัดเจน

คำถาม 5: cacheLife แตกต่างจาก export revalidate เก่าอย่างไร?

revalidate เป็นตัวเลขเดียว (วินาที) ที่ตั้งที่ระดับหน้าหรือ layout cacheLife ใช้ profile ที่มีชื่อพร้อมสามมิติ: stale (serve เนื้อหาเก่า), revalidate (ช่วงเวลา background refresh) และ expire (หมดอายุถาวร) Profile ถูกรวมศูนย์ใน next.config.ts ดังนั้นการเปลี่ยนแปลงหนึ่งครั้งจะมีผลกับทุก call site ที่ใช้ profile นั้น

คำถาม 6: ความแตกต่างระหว่าง revalidateTag และ updateTag คืออะไร?

ทั้งคู่ invalidate cache entry ตาม tag updateTag เป็น primitive ที่แนะนำใน Next.js 16.3 ออกแบบมาเพื่อรวมเข้ากับโมเดล explicit caching อย่างสะอาด ในทางปฏิบัติทั้งคู่ทำงานได้สำหรับ on-demand invalidation แต่ updateTag เป็น API ที่มองไปข้างหน้า

คำถาม 7: ควรใช้ export const instant = false เมื่อไหร่?

เมื่อ route ควรตั้งใจ block navigation จนกว่า server จะตอบกลับ ตัวอย่างเช่น blog อาจไม่แสดง loading shell สำหรับโพสต์ ต้องการให้ผู้อ่านเห็นเนื้อหาเต็มทันที สิ่งนี้ opt out จาก Instant Insights error สำหรับ route นั้น

สำหรับ คำถามสัมภาษณ์ Next.js data fetching เพิ่มเติม SharpSkill มี module ฝึกซ้อมพร้อม session จับเวลาและคำอธิบายละเอียด Module Next.js Server Actions ครอบคลุม pattern Server Action ที่จับคู่กับ cache invalidation

Checklist ปฏิบัติสำหรับ Production Cache Components

  • เปิดใช้งาน cacheComponents: true และ partialPrefetching: true ใน next.config.ts
  • Audit ทุกหน้า: เพิ่ม "use cache" ให้หน้า static และ function ดึงข้อมูลที่ให้บริการเนื้อหาสาธารณะ
  • ห่อเนื้อหา dynamic ทั้งหมด (user-specific, request-time) ใน <Suspense> boundary พร้อม skeleton fallback ที่มีความหมาย
  • ใช้ "use cache: private" สำหรับ function ที่เข้าถึง cookies, headers หรือ return ข้อมูลส่วนบุคคล
  • พิจารณา "use cache: remote" สำหรับข้อมูล high-traffic ในสภาพแวดล้อม serverless
  • กำหนด custom cacheLife profile สำหรับหมวดหมู่ข้อมูลทั่วไป (ข้อมูลสินค้า, user session, เนื้อหา static)
  • เพิ่ม cacheTag() ให้ทุก cached function ที่อาจต้องการ on-demand invalidation
  • ใช้ updateTag() สำหรับ on-demand invalidation ใน Server Actions
  • ทดสอบใน production mode ด้วย next build && next start เพราะพฤติกรรม caching ใน next dev แตกต่างอย่างมาก
  • เขียน Playwright test ด้วย instant() เพื่อจับ navigation regression
  • ใช้ Navigation Inspector ใน DevTools เพื่อ visualize shell ที่ถูก prefetch

เริ่มฝึกซ้อมเลย!

ทดสอบความรู้ของคุณด้วยตัวจำลองสัมภาษณ์และแบบทดสอบเทคนิคครับ

Sources

สิ่งที่ต้องจำเกี่ยวกับ Next.js 16 Cache Components

  • Next.js 16 แทนที่ implicit caching ด้วย "use cache" แบบ explicit ที่ขอบเขต file, component และ function
  • Next.js 16.3 เพิ่ม Instant Navigations: ด้วย partialPrefetching: true แอปรู้สึกตอบสนองเหมือน SPA
  • PPR stable ภายใต้ cacheComponents: true ส่ง static shell พร้อมเนื้อหา dynamic ที่ stream
  • Profile cacheLife แทนที่ revalidate ด้วยการควบคุมระยะเวลา cache สามมิติที่รวมศูนย์
  • cacheTag + updateTag เปิดใช้งาน on-demand invalidation; tag ที่หายไปหมายถึงหมดอายุตามเวลาเท่านั้น
  • "use cache: private" จำเป็นสำหรับข้อมูล user-specific เพื่อป้องกันการรั่วไหลของข้อมูลระหว่างผู้ใช้
  • "use cache: remote" ช่วยสภาพแวดล้อม serverless รักษา cache ข้าม cold start
  • Root params จาก next/root-params แก้ปัญหา prop-drilling สำหรับ global dynamic segment เช่น [lang]
  • คำถามสัมภาษณ์ในปี 2026 มุ่งเน้นที่การเปลี่ยนจาก implicit เป็น explicit, Instant Navigations 16.3, Partial Prefetching และความปลอดภัยของ cache

เริ่มฝึกซ้อมเลย!

ทดสอบความรู้ของคุณด้วยตัวจำลองสัมภาษณ์และแบบทดสอบเทคนิคครับ

ชาเลนจ์ประจำวัน

คุณหาบั๊กใน React / Next.js เจอไหม

โค้ดจริงหนึ่งชิ้น บั๊กที่ซ่อนอยู่หนึ่งจุด วันละหนึ่งครั้ง ลองได้โดยไม่ต้องมีบัญชี

Anthony Fillion-Maillet

เขียนโดย

Anthony Fillion-Maillet

ผู้ก่อตั้ง SharpSkill

เป็นนักพัฒนาฟูลสแตกมากว่า 10 ปี ดูแล SharpSkill และรับผิดชอบทุกสิ่งที่เผยแพร่ที่นี่

อัปเดตเมื่อ 25 สิงหาคม 2569

แท็ก

#next.js
#react
#caching
#ppr
#interview

แชร์

บทความที่เกี่ยวข้อง