~3 دقیقه مطالعه • بروزرسانی ۹ آبان ۱۴۰۴
۱. after چیست؟
after یک تابع در Next.js است که به شما اجازه میدهد وظایف غیرمسدودکننده مانند لاگگیری، تحلیل، یا ارسال داده را پس از پایان پاسخ یا prerender اجرا کنید. این تابع باعث تأخیر در پاسخدهی نمیشود و برای اجرای side effectها بسیار مناسب است.
۲. محلهای قابل استفاده
- Server Components (از جمله generateMetadata)
- Server Actions
- Route Handlers
- Proxy
۳. نحوه استفاده
// app/layout.tsx
import { after } from 'next/server'
import { log } from '@/app/utils'
export default function Layout({ children }: { children: React.ReactNode }) {
after(() => {
log() // اجرا پس از رندر layout
})
return <>{children}</>
}۴. نکات مهم
- after یک API داینامیک نیست و باعث dynamic شدن مسیر نمیشود
- در صفحات استاتیک، callback در زمان build یا revalidate اجرا میشود
- حتی اگر پاسخ با خطا یا redirect تمام شود، after اجرا خواهد شد
- میتوان از React cache برای جلوگیری از اجرای تکراری استفاده کرد
- میتوان after را داخل after دیگر قرار داد و wrapperهای سفارشی ساخت
۵. استفاده از APIهای درخواست
در Server Actions و Route Handlers میتوانید از cookies و headers استفاده کنید:
// app/api/route.ts
import { after } from 'next/server'
import { cookies, headers } from 'next/headers'
import { logUserAction } from '@/app/utils'
export async function POST(request: Request) {
// انجام عملیات اصلی...
after(async () => {
const userAgent = (await headers().get('user-agent')) || 'unknown'
const sessionCookie = (await cookies().get('session-id'))?.value || 'anonymous'
logUserAction({ sessionCookie, userAgent })
})
return new Response(JSON.stringify({ status: 'success' }), {
status: 200,
headers: { 'Content-Type': 'application/json' },
})
}توجه: در Server Components نمیتوان از cookies یا headers داخل after استفاده کرد، چون این APIها باید در زمان رندر قابل ردیابی باشند.
۶. پشتیبانی پلتفرمها
| نوع استقرار | پشتیبانی |
|---|---|
| Node.js server | ✅ |
| Docker container | ✅ |
| Static export | ❌ |
| Adapters | بسته به پلتفرم |
جمعبندی
تابع after در Next.js ابزاری قدرتمند برای اجرای وظایف پسزمینهای پس از پاسخدهی است. با استفاده از آن میتوانید بدون تأثیر بر عملکرد صفحه، عملیاتهایی مانند لاگگیری، تحلیل، یا ارسال داده را اجرا کنید — چه در زمان build، چه در زمان اجرا.
نوشته و پژوهش شده توسط دکتر شاهین صیامی