אופס שברתי את next
פוסט זה כולל טיפ קצר לעבודה עם React. אם אתם רוצים ללמוד איתי ריאקט מההתחלה ובצורה מקצועית תשמחו לשמוע שבניתי קורס מלא הכולל עשרות שיעורי וידאו והמון תרגול בו לומדים ריאקט מההתחלה ועד לנושאים המתקדמים.
לפרטים נוספים והרשמה בקרו בדף קורס ריאקט כאן באתר.
את הקוד הבא כתבתי בטעות ואני מודה שהתוצאה הפתיעה אותי:
const data = await fetch('https://api.vercel.app/blog', {
cache: 'no-store',
next: {
revalidate: 60
}
})
הקוד עבד בפיתוח אבל גרם ל build להיתקע. בואו נבין מה קורה פה.
1. למה ה build נתקע
הבעיה עם הקוד היא שהעברתי שני ערכים מתנגשים באוביקט האופציות:
האופציה no-store ל cache גורמת ל next לא לשמור את התוצאה של ה fetch וכך למעשה להפוך כל עמוד שמשתמש בקוד הזה לדינמי.
האופציה revalidate גורמת ל next להשתמש במנגנון ISR. במנגנון זה ה fetch מחושב בזמן הבנייה אבל תוצאת הבנייה תישמר רק ל 60 שניות. בקשת העמוד אחרי 60 שניות תגרום ל next לבצע את ה fetch מחדש.
בדרך כלל כשיש שתי אופציות מתנגשות לאחת מהן תהיה עדיפות, אבל במקרה של נקסט (בדקתי על גירסה 15.3) שילוב שתי האופציות גרם ל build להיתקע ולהיכשל ביצירת גירסת ה ISR.
לכן ההמלצה שלי בעבודה עם נקסט היא לוותר על הגדרת cache: 'no-store'
באופן גורף. כשצריכים בנייה דינמית אפשר להעביר ערך 0 ל revalidate וכך מקבלים את אותה התנהגות:
const data = await fetch('https://api.vercel.app/blog', {
// same as cache: 'no-store'
next: {revalidate: 0}
})