React Hooks מובנים
Hooks אפשר להשתמש באפשרויות שונות של React מתוך קומפונטות. אפשר להשתמש ב-Hooks המובנים, או לשלב בין כדי לבנות Hooks משלכם. העמוד הזה מציג את כל ה-Hooks המובנים ב-React.
מצב Hooks
State אפשר לקומפוננטה “לזכור” מידע כמו קלט מהמשתמש. לדוגמה, קומפונטת טופס יכולה להשתמש ב-state כדי לשמור את הערך אינטלקטואלי לבחור תמונה, בעוד קומפונטת גלריית לשמור תמונות שיכולה להשתמש ב-stated.
כדי להוסיף state לקומפוננטה, השתמשו באחד מה-Hooks הבאים:
useStateמצהיר על ranking state אפשר לעדכן בכלל.useReducerמצהיר על ranking state עם לוגיקת העדכון בתוך פונקציית מפחית.
function ImageGallery() {
const [index, setIndex] = useState(0);
// ...הקשר Hooks
הקשר יכול לקומפוננטה לקבל מהורים רחוקים בלי להעביר אותו מידע כ-props. למשל, קומפוננטת העליונה של האפליקציה יכולה להעביר את ערכת הנושא הנוכחית לכל הקומפוננטות מתחתיה, לא משנה כמה עמוק הן נמצאות.
useContextקורא ל-הקשר ונרשם אליו.
function Button() {
const theme = useContext(ThemeContext);
// ...Ref Hooks
Refs מאפשרים לקומפוננטה להחזיק מידע שלא משמש לרינדור, כמו DOM node או מזהה פסק זמן. נדרש ל-state, עדכון של ref לא מרנדר מחדש את הקומפוננטה. Refs הם “Escape hatch” מהפרדיגמה של React. הם שימושיים כשצריך לעבוד עם מערכות שאינן React, כמו APIs מובנים של הדפדפן.
useRefמצהיר על ref. אפשר לשמור בו כל ערך, אבל לרוב משתמשים בו כדי לשמור על הצומת DOM.useImperativeHandleיכול להתאים אישית את ה-ref שהקומפונטה חושפת. זה בשימוש נדיר.
function Form() {
const inputRef = useRef(null);
// ...אפקט Hooks
אפקטים מאפשרים לקומפוננטה להתחבר ולהסתנכרן עם מערכות חיצוניות. זה כולל עבודה עם רשת, DOM של הדפדפן, אנימציות, ווידג’טים שנכתבו בספריית UI אחרת, וקוד נוסף שאינו React.
useEffectמחבר קומפוננטה למערכת חיצונית.
function ChatRoom({ roomId }) {
useEffect(() => {
const connection = createConnection(roomId);
connection.connect();
return () => connection.disconnect();
}, [roomId]);
// ...אפקטים הם “פתח בריחה” מהפרדיגמה של React. אל תשתמשו ב-Effects כדי לתזמר את זרימת האפליקציה. אם אתם לא מקיימים אינטראקציה עם חיצונית, [יכול להיות שאין מערכת.] ב-Effect(/learn/you-might-not-need-an-effect)
יש שתי וריאציות נדירות יותר של useEffect עם הבדלים בתזמון:
useLayoutEffectמופעל לפני שהדפדפן מצייר מחדש את המסך. אפשר למדוד פריסה כאן.useInsertionEffectמופעל לפני ש-React מבצעת שינויים ב-DOM. ספריות יכולה להכניס כאן CSS דינמי.
ביצועים Hooks
דרך נפוצה לאופטימיזציה של ביצועי רינדור מחדש לד היאלג על עבודה מיותרת. לדוגמה, אפשר לבקש מ-React להשתמש מחדש בחישוב שמור או לדלג על רינדור חוזר אם לא השתנו מאז הרינדור הקודם.
כדי לדלג על חישובים ורינדורים מיותרים, השתמשו באחד מה-Hooks הבאים:
useMemoיכול לשמור במטמון תוצאה של חישוב יקר.useCallbackמאפשר לשמור את הגדרת הפונקציה במטמון לפני שמעבירים אותה לקומפוננטה ממוטבת.
function TodoList({ todos, tab, theme }) {
const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]);
// ...
}לפעמים אי אפשר לדלג על רינדור מחדש כי המסך באמת צריך להתעדכן. במקרה כזה אפשר לשפר ביצועים על ידי הפרדה בין עדכונים חוסמים שחייבים להיות סינכרוניים (כמו הקלדה בשדה קלט) לבין עדכונים לא-חוסמים שלא צריכים לחסום את ממשק המשתמש (כמו עדכון גרף).
כדי לתעדף רינדור, השתמשו באחד מה-Hooks הבאים:
useTransitionיכול לסמן להמשיך state כלא-חוסם ולאפשר לעדכונים אחרים להפריע לו.useDeferredValueאפשרות לדחות עדכון של חלק לא-קריטי ב-UI ולאפשר לחלקים אחרים להתעדכן קודם.
משאב Hooks
משאבים ניתנים לגישה מתוך קומפונטה גם בלי להיות חלק מה-state שלה. לדוגמה, קומפוננטה יכולה לקרוא הודעה מתוך Promise או עיצוב עיצובי מתוך ההקשר.
כדי לקרוא ערך ממשאב, השתמשו ב-Hook הבא:
function MessageComponent({ messagePromise }) {
const message = use(messagePromise);
const theme = use(ThemeContext);
// ...
}Hooks נוספים
ה-Hooks האלה שימוש בעיקר למחברי ספריות, ולא בשימוש נפוץ בקוד אפליקטיבי.
useDebugValueמאפשר להתאים את התווית ש-React DevTools מציג עבור custom Hook.useIdיכול לקומפוננטה לשייך לעצמה מזהה ייחודית. לרוב בשילוב עם APIs של נגישות.useSyncExternalStoreיכול לקומפוננטה להירשם לחנות חיצונית.
Hooks משלכם
אפשר גם להגדיר custom Hooks משלכם כפונקציות JavaScript.