📘 מדריך React ומבוא לתכנות
הצעד הראשון שלכם בעולם הפיתוח מתחיל כאן. למידה מובנית מבית More-ways.

Custom Hooks — מדריך עם דוגמאות חיות
מה זה Custom Hook ולמה להשתמש?
Custom Hook הוא פונקציה שמתחילה ב-use ומאפשרת לאגד לוגיקת Hooks לשימוש חוזר בין קומפוננטות. לדוגמה: נראות/הסתרה (toggle), שליפת נתונים (fetch), דיבאונס/תזמון, ניהול מאזינים ועוד — תוך שמירה על חוקי Hooks ועל קוד נקי וקריא.
חוקי זהב
- ה-Hook חייב להתחיל בשם
use. - מותר לקרוא ל-Hooks רק ברמה העליונה של ה-Hook (לא בתוך תנאי/לולאה).
- כל תלות שמופיעה בלוגיקת ה-Hook חייבת להופיע במערכי התלותים.
- שמרו על ממשק פשוט וברור: החזירו אובייקט/טופל קטן עם מה שבאמת צריך.
- פרקו לוגיקות: עדיף כמה Hooks קטנים מאשר מפלצת אחת.
תוכן עניינים
1) useToggle — מתג נראות
Hook קטן לניהול בוליאן (נראות/הסתרה). שימושי לטוגלים, מודלים, אקורדיון וכד'.
import { useState } from 'react';
function useToggle(defaultValue = false) {
const [value, setValue] = useState(!!defaultValue);
const toggle = () => setValue(v => !v);
const on = () => setValue(true);
const off = () => setValue(false);
return { value, toggle, on, off };
}
export default useToggle;דוגמה חיה
toggle custom hook
some stuff
קוד הדוגמה
import useToggle from './useToggle';
function ToggleExample() {
const { value: show, toggle } = useToggle(true);
return (
<div>
<h4>toggle custom hook</h4>
<button className='btn' onClick={toggle}>toggle</button>
{show && <h4>some stuff</h4>}
</div>
);
}
export default ToggleExample;2) useFetch — שליפת נתונים עם Multiple Returns
Hook כללי שמחזיר isLoading, isError, data. מטפל ב-AbortController וניקיון, ובנוי לפי סדר Loading → Error → Success.
import { useState, useEffect } from 'react';
function useFetch(url, options = {}) {
const [isLoading, setIsLoading] = useState(true);
const [isError, setIsError] = useState(false);
const [data, setData] = useState(null);
useEffect(() => {
if (!url) { setIsError(true); setIsLoading(false); return; }
const ctrl = new AbortController();
(async () => {
try {
const res = await fetch(url, { signal: ctrl.signal, ...options });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const json = await res.json();
setData(json);
} catch (err) {
if (err.name !== 'AbortError') setIsError(true);
} finally {
setIsLoading(false);
}
})();
return () => ctrl.abort();
}, [url]); // בכוונה תלוי רק ב-url, אפשר להרחיב ל-options אם יציב
return { isLoading, isError, data };
}
export default useFetch;דוגמה חיה — פרופיל GitHub (QuincyLarson)
⌛ Loading…
קוד הדוגמה
import useFetch from './useFetch';
const url = 'https://api.github.com/users/QuincyLarson';
function FetchData() {
const { isLoading, isError, data: user } = useFetch(url);
if (isLoading) return <h2>Loading...</h2>;
if (isError) return <h2>There was an error...</h2>;
const { avatar_url, name, company, bio } = user || {};
return (
<div>
<img style={{ width: 150, borderRadius: 25 }} src={avatar_url} alt={name} />
<h2>{name}</h2>
{company && <h4>works at {company}</h4>}
<p>{bio}</p>
</div>
);
}
export default FetchData;headers עם טוקן, או להחליף כתובת API.3) useFetchPerson — וריאציה ממוקדת לאובייקט "משתמש"
אותה לוגיקה, אך עם state ממוקד בשם user להבהרת הכוונה בקומפוננטה הקוראת.
import { useState, useEffect } from 'react';
function useFetchPerson(url) {
const [isLoading, setIsLoading] = useState(true);
const [isError, setIsError] = useState(false);
const [user, setUser] = useState(null);
useEffect(() => {
if (!url) { setIsError(true); setIsLoading(false); return; }
const ctrl = new AbortController();
(async () => {
try {
const res = await fetch(url, { signal: ctrl.signal });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const json = await res.json();
setUser(json);
} catch (err) {
if (err.name !== 'AbortError') setIsError(true);
} finally {
setIsLoading(false);
}
})();
return () => ctrl.abort();
}, [url]);
return { isLoading, isError, user };
}
export default useFetchPerson;דוגמה חיה — אותו היוזר עם Hook ייעודי
⌛ Loading…
טיפים ודגשים
- הוציאו מה-Hook רק מה שבאמת צריך — שמרו על API קטן.
- אל תחשפו setState גולמי אם אין צורך — החזירו פעולות (כמו
toggle/on/off). - ל-fetch: צרפו ניקוי עם
AbortController, וטפלו ב-!res.ok. - התאימו את מערכי התלותים כך שה-Hook יהיה צפוי ולא יפתיע בריצות מיותרות.
- שקלו פיצול ל-Hooks קטנים נפרדים במקום Hook ענק עם הרבה מצבים.
למה ללמוד תכנות וסייבר ב-More-ways?
עולם הטכנולוגיה משתנה במהירות, והיום כבר לא מספיק רק לדעת לכתוב קוד. ב-More-ways אנחנו מאמינים בשילוב קריטי בין פיתוח Full-Stack, הבנת ארכיטקטורת רשתות, ושימוש מתקדם ב-בינה מלאכותית (AI). המדריך שלפניכם הוא רק טעימה מהידע המקצועי שאנו מעבירים בקורסים שלנו, הכוללים ליווי אישי, פרויקטים מעשיים והכנה לשוק העבודה המודרני.
האם אפשר ללמוד תכנות ללא ניסיון?
בוודאי. המסלולים שלנו ב-More-ways מונגשים גם למתחילים, עם דגש על חשיבה לוגית ובניית בסיס איתן לפני הצלילה לקוד המורכב.
איך AI משתלב בלימודי הייטק?
אנחנו מלמדים אתכם להשתמש בכלי AI כדי להאיץ את הפיתוח, לדבג קוד ביעילות ולבנות אפליקציות חכמות יותר בזמן קצר יותר.
מוכנים לקחת את הקריירה לשלב הבא?
מעבר לאתר More-ways הרשמי