בעת ניהול מצבים מורכבים ביישום Next, דברים יכולים להסתבך במהירות. ווים מסורתיים כמו useState סיוע עם הנהלת המדינה אך מציגים בעיה של קידוחי אבזרי. קידוח אבזר פירושו העברת נתונים או פונקציות דרך מספר רכיבים.
גישה טובה יותר תהיה להפריד את היגיון ניהול המצב שלך מהרכיבים ולעדכן את המצבים הללו מכל מקום ביישום שלך. אנו נדריך אותך כיצד להשתמש ב-Context API כאשר אנו בונים יישום פשוט של רשימת מטלות.
לפני שתתחיל ברשימת המטלות שלך
לפני שתוכל לבנות את יישום רשימת המטלות, תצטרך:
ידע בסיסי ב מפעילי JavaScript מודרניים ו Hook useState של React.
הבנה איך לעשות הרס מערכים ואובייקטים ב-JavaScript.
צוֹמֶת v16.8 ואילך מותקן במחשב המקומי שלך והיכרות עם מנהלי חבילות כמו npm או חוט.
אתה יכול למצוא את הפרויקט המוגמר ב GitHub לעיון וחקירה נוספת.
הבנת מצב יישום וניהול
מצב יישום מתייחס למצב הנוכחי של יישום בנקודת זמן נתונה. זה כולל מידע שהאפליקציה מכירה ומנהלת, כגון קלט משתמש ונתונים שנשלפו ממסד נתונים או ממשק API (ממשק תכנות יישומים).
כדי להבין את מצב היישום, שקול את המצבים האפשריים של יישום נגד פשוט. הם כוללים:
רכיב React יכול להירשם לשינויים במצב. כאשר משתמש מקיים אינטראקציה עם רכיב כזה, הפעולות שלו - כמו לחיצות על כפתור - יכולות לנהל עדכונים למדינה.
קטע זה מציג יישום נגד פשוט, במצב ברירת המחדל שלו, שמנהל מצב על סמך פעולות קליקים:
const [counter, setCounter] = useState(0);
לַחֲזוֹר (
{counter}</h1>
התקנה והתקנה
מאגר הפרויקט מכיל שני ענפים: מַתנֵעַ ו הֶקשֵׁר. אתה יכול להשתמש בענף המתחיל כבסיס לבניית הפרויקט או בענף ההקשר כדי לצפות בתצוגה מקדימה של ההדגמה הסופית.
שיבוט אפליקציית Starter
אפליקציית המתנע מספקת את ממשק המשתמש שתזדקק לאפליקציה הסופית, כך שתוכל להתמקד ביישום לוגיקה הליבה. פתח מסוף והפעל את הפקודה הבאה כדי לשכפל את ענף ההתחלה של המאגר למחשב המקומי שלך:
הפעל את הפקודה הבאה, בתוך ספריית הפרויקט, כדי להתקין את התלות ולהפעיל את שרת הפיתוח שלך:
yarn && yarn dev
אוֹ:
npm i && npm להפעיל dev
אם הכל הלך כשורה, ממשק המשתמש אמור להופיע בדפדפן שלך:
יישום ההיגיון
ה-Context API מספק דרך לנהל ולשתף נתוני מצב בין רכיבים, ללא צורך בקידוחים ידניים.
שלב 1: צור ויצוא הקשר
ליצור src/app/context תיקיה כדי לאחסן את קובץ ההקשר ולשמור על סדרת ספריית הפרויקט. בתוך תיקיה זו, צור א todo.context.jsx קובץ שיכיל את כל הלוגיקה של ההקשר עבור היישום.
ייבא את ליצור הקשר פונקציה מה לְהָגִיב ספריה וקוראים לה, מאחסנים את התוצאה במשתנה:
כעת יצרת את המצבים וכתבת קוד כדי לנהל אותם, עליך להפוך את המצבים ואת פונקציות המטפל לזמינות עבור ספק. אתה יכול לספק אותם בצורה של אובייקט, באמצעות ה ערך רכוש ה ספק רְכִיב.
ה ספק שיצרת חייב לעטוף את הרכיב ברמה העליונה כדי להפוך את ההקשר לזמין לכל היישום. כדי לעשות זאת, ערוך src/app/page.jsx ולעטוף את לעשות רכיב עם ה TodoContextProvider רְכִיב:
; </TodoContextProvider>;
שלב 5: השתמש בהקשר ברכיבים
ערוך את שלך src/app/components/Todos.jsx לתיק ולפרק משימות, משימה, handleTodoInput, ו ליצור משימה באמצעות שיחה ל השתמש בTodoContext פוּנקצִיָה.
כעת, עדכן את רכיב הטופס כדי לטפל באירוע השליחה ושינויים בשדה הקלט הראשי:
שלב 6: עיבוד משימות בממשק המשתמש
כעת תוכל להשתמש באפליקציה כדי ליצור ולהוסיף משימה ל- משימות רשימה. כדי לעדכן את התצוגה, תצטרך למפות דרך קיים משימות ולעבד אותם בממשק המשתמש. ראשית, צור א src/app/components/Todo.jsx רכיב כדי להחזיק פריט מטלה בודד.
בתוך ה src/app/components/Todo.jsx רכיב, ערוך או מחק משימה על ידי הפעלת ה- updateTask ו מחק משימה פונקציות שיצרנו בהן src/app/context/todo.context.jsx קוֹבֶץ.
כדי לעבד את src/app/components/Todo.jsx רכיב עבור כל אחד מְשִׁימָה, היכנס ל src/app/components/Todos.jsx קובץ ומפה על תנאי דרך ה משימות מיד אחרי ה כּוֹתֶרֶת תג סגירה.