הפרדת ההיגיון וממשק המשתמש מקלה על כתיבה ובדיקת רכיבים.
המטרה העיקרית של מאמר זה היא לוודא שאנו כותבים את הרכיבים החדשים שלנו באופן שבו לכל רכיב אכפת רק מהנתונים שלו, טיפול בשגיאות, טעינה וכל היגיון נדרש אחר (אנו נדון בשיתוף נתונים בין רכיבים במאמר אחר ).
למה זה חשוב?
- מדרגיות: היא אכן ניתנת להרחבה גבוהה.
- יכולת הסרה: מחיקת רכיב לא אמורה להיות בעיה אחרי היום, לא קורים שינויים או רגרסיות שבירה.
- יכולת תנועה: היכולת להשתמש ברכיב בכל מקום, ואולי בין פרויקטים המשתמשים באותו API.
הידיים על
בואו נצלול לתוך הקוד ונראה 2 דוגמאות לפני ואחרי ה-refactoring.
בואו ניקח את הדוגמה הבאה וננסה להבין איך לגרום לזה לקרות:
import React, { useMemo } from 'react';
import useAxios from 'axios-hooks'; const TodoList = () => { const [{ data, loading, error }] = useAxios( `/`); const todoItems = useMemo( () => (data ? data.filter((item) => item.status === 'TODO') : []), [data], ); if (loading) return <div>Loading...</div>; if (error) return <div>Error</div>; return <div>{JSON.stringify(todoItems)}</div>;
}; export default TodoList;
כפי שניתן לראות לעיל, יש לנו דוגמה פשוטה ליישום רשימת המטלות על ידי בקשת הנתונים באמצעות תצורת API מרחוק באמצעות אקסיות.
האם אתה יכול לשים לב לחישוב הפשוט לחלץ את הפריטים עם סטטוס = TODO? אם תשובתך חיובית, אז אנחנו באותו עמוד.
כפי שהסברנו בתחילת המאמר, המשימה שלנו היא לבודד את ההיגיון מהממשק, אבל בדוגמה שלמעלה יש לנו הגיון באותו קובץ JS, בואו נראה מה צריך לעשות כדי להשיג את המשימה שלנו.
אז, קודם כל, אנחנו צריכים להוציא את ההיגיון מהרכיב.
import { useMemo } from 'react';
import useAxios from 'axios-hooks'; const useTodoList = () => { const [{ data, loading, error }] = useAxios( `/`); const todoItems = useMemo( () => (data ? data.filter((item) => item.status === 'TODO') : []), [data], ); return [{ data, loading, error, todoItems }];
}; export default useTodoList;
כפי שאתה יכול לראות, קראנו לזה "useTodoList". הוק הזה צריך להכיל את ההיגיון של רכיב TodoList.
אתה יכול לשים לב שאין לנו ממשק משתמש בקובץ, זה הוק מותאם אישית.
אבל איך צריך להיראות הרכיב הראשי "TodoList"?
import React from 'react'; import useTodoList from './useTodoList'; const TodoList = () => { const [{ data, loading, error, todoItems }] = useTodoList(); if (loading) return <div>Loading...</div>; if (error) return <div>Error</div>; return <div>{JSON.stringify(todoItems)}</div>;
}; export default TodoList;
פשוט, הא? בדיוק בגלל זה חשוב לבנות רכיבים שבהם ההיגיון העסקי אינו חלק מה-UI ולהתמודד עם ה-Custom Hook כ-API לרכיב שלכם.
מה לגבי התקשורת בין רכיבים כאשר כל רכיב עובד במצב עצמאי? זה יהיה הנושא המעניין שנעסוק בו במאמר הבא.
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- PlatoAiStream. Web3 Data Intelligence. הידע מוגבר. גישה כאן.
- הטבעת העתיד עם אדריאן אשלי. גישה כאן.
- קנה ומכירה של מניות בחברות PRE-IPO עם PREIPO®. גישה כאן.
- מקור: https://www.codementor.io/esmatnawahda/how-to-separate-logic-from-ui-with-react-components-by-esmat-ibrahim-javascript-in-plain-english-25c8b0j0uf
- :הוא
- :לֹא
- :איפה
- a
- יכולת
- אודות
- מֵעַל
- להשיג
- לרוחב
- לאחר
- תעשיות
- an
- ו
- לענות
- כל
- בְּכָל מָקוֹם
- API
- ARE
- מאמר
- AS
- At
- אקסיו
- BE
- לפני
- ההתחלה
- בֵּין
- שבירה
- לִבנוֹת
- עסקים
- אבל
- by
- נקרא
- CAN
- שינויים
- קוד
- תקשורת
- רְכִיב
- רכיבים
- תְצוּרָה
- לכסות
- מנהג
- נתונים
- עסקה
- בְּרִירַת מֶחדָל
- אחר
- לדון
- עשה
- לא
- כל אחד
- קל יותר
- שגיאה
- Ether (ETH)
- בדיוק
- דוגמה
- דוגמאות
- מוסבר
- יצוא
- תמצית
- שלח
- ראשון
- הבא
- בעד
- החל מ-
- מטרה
- טיפול
- ידות על
- לקרות
- יש
- גָבוֹהַ
- איך
- איך
- HTTPS
- if
- יישום
- לייבא
- חשוב
- in
- מעניין
- אל תוך
- סוגיה
- IT
- פריטים
- שֶׁלָה
- כמו
- רשימה
- טוען
- הגיון
- נראה
- נראה כמו
- ראשי
- לעשות
- עושה
- משימה
- מצב
- צורך
- נחוץ
- חדש
- הבא
- לא
- הודעה..
- of
- on
- רק
- or
- אחר
- שלנו
- הַחוּצָה
- עמוד
- חלק
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- פרויקטים
- להגיב
- מרחוק
- לַחֲזוֹר
- אותו
- להרחבה
- לִרְאוֹת
- נפרד
- שיתוף
- צריך
- לְהַצִיג
- פָּשׁוּט
- עצמאי
- מצב
- בטוח
- לקחת
- מבחן
- זֶה
- השמיים
- אז
- זֶה
- דרך
- ל
- היום
- נושא
- לנסות
- ui
- להבין
- להשתמש
- באמצעות
- דֶרֶך..
- we
- מה
- מתי
- אשר
- למה
- יצטרך
- עם
- עובד
- לכתוב
- כתיבה
- כן
- אתה
- זפירנט