רוצים להשתלב בתעשיית ההייטק?למסלולי הכשרה ב-Full Stack, סייבר ו-AI לחצו כאן
React logo

useRef

מה זה useRef?

useRef מחזיר אובייקט עם שדה current שניתן לשנותו מבלי לגרום לרינדור. משמש ל:

  • גישה לאלמנטים ב-DOM (למשל פוקוס לקלט).
  • שמירה על ערכים מתמשכים בין רינדורים (טיימרים, מונים, previous value).
  • דילוג על הריצה הראשונה של אפקטים/הבחנה בין mount ל-update.

תוכן עניינים

  1. ref ל-DOM: פוקוס ושימושים
  2. ערכים מתמשכים ללא רינדור
  3. Previous Value עם useRef
  4. מדידת אלמנט DOM
  5. ניהול טיימרים/אינטרוולים
  6. קוד בסיס שקיבלת (UseRefBasics)
  7. טיפים חשובים
  8. SEO: קישורים חיצוניים נכון

1) ref ל-DOM

דוגמה: פוקוס אוטומטי על שדה קלט בעת mount.

const inputRef = useRef(null);
useEffect(() => {
  inputRef.current?.focus();
}, []);
return <input ref={inputRef} />;
דוגמה חיה

2) ערכים מתמשכים ללא רינדור

שינוי ref.current לא מפעיל רינדור, לכן מתאים לטיימרים, מונים פנימיים או שמירה על אובייקטים בין רינדורים.

const ref = useRef(0);
ref.current += 1; // לא יגרום לרינדור
דוגמה חיה
renders: 0
counterRef.current: 0

ערך בתוך useRef אינו מפעיל רינדור; טוב לשמירת ספירות, מזהים וטיימרים.

3) Previous Value עם useRef

שומרים את הערך הקודם בכל שינוי, ללא רינדור נוסף.

const [value, setValue] = useState(0);
const prevRef = useRef(value);
useEffect(() => { prevRef.current = value; }, [value]);
דוגמה חיה
value: 0
prev: 0

4) מדידת אלמנט DOM

מתאים למדידות, מיקומים ו־layout.

const boxRef = useRef(null);
const [rect, setRect] = useState({});
useEffect(() => {
  const el = boxRef.current;
  if (!el) return;
  const update = () => setRect(el.getBoundingClientRect());
  update();
  const ro = new ResizeObserver(update);
  ro.observe(el);
  return () => ro.disconnect();
}, []);
דוגמה חיה
שנה רוחב חלון/טקסט כדי לראות עדכון.
width: 0px, height: 0px

5) ניהול אינטרוולים עם ref

שומרים את מזהה האינטרוול ב־ref כדי לעצור/להפעיל ולהימנע מהחזקה ב־state.

const idRef = useRef(null);
const start = () => {
  if (idRef.current) return;
  idRef.current = setInterval(doSomething, 1000);
};
const stop = () => {
  clearInterval(idRef.current);
  idRef.current = null;
};
דוגמה חיה
ticks: 0

6) UseRefBasics — הקוד שלך (עם הערות)

import { useEffect, useRef, useState } from 'react';

const UseRefBasics = () => {
  const [value, setValue] = useState(0);
  const refContainer = useRef(null);
  const isMounted = useRef(false);

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(refContainer.current);         // מצביע לקלט
    const name = refContainer.current.value;   // קריאת ערך מה- input
    console.log(name);
  };

  useEffect(() => {
    // הפוקוס על הקלט בעת mount
    refContainer.current.focus();
  }, []);

  useEffect(() => {
    // דילוג על הריצה הראשונה
    if (!isMounted.current) {
      isMounted.current = true;
      return;
    }
    console.log('re-render'); // ירוץ רק בעדכונים
  }, [value]);

  return (
    <div>
      <form className='form' onSubmit={handleSubmit}>
        <div className='form-row'>
          <label htmlFor='name' className='form-label'>Name</label>
          <input type='text' id='name' ref={refContainer} className='form-input' />
        </div>
        <button type='submit' className='btn btn-block'>submit</button>
      </form>

      <h1>value : {value}</h1>
      <button onClick={() => setValue(value + 1)} className='btn'>increase</button>
    </div>
  );
};

export default UseRefBasics;

7) טיפים ודגשים

  • שינוי ref.current לא מרנדר — טוב לשמירת מידע צדדי (טיימרים, previous value, דגלים).
  • אל תכתבו ל־ref.current בתוך הרינדור אם הערך משפיע על ה־UI; בשביל זה יש state.
  • לשילוב עם useEffect: ניתן לשמור דגלים כמו isMounted.current כדי לדלג על הריצה הראשונה.
  • במדידות DOM העדיפו ResizeObserver על מאזיני resize גלובליים.

8) SEO: קישורים חיצוניים (Best Practices)

  • השתמשו בעוגן עם טקסט תיאורי (Anchor Text) שמסביר מה יש בקישור — זה עוזר למנועי חיפוש ולהנגשה.
  • ליעד חיצוני פתחו בטאב חדש באמצעות target="_blank" + הוסיפו rel="noopener noreferrer" לבטיחות.
  • אם הקישור ממותג/רשמי, הזכירו את שם המקור (MDN/React Docs) בטקסט.
// דוגמת קישורים חיצוניים ידידותיים ל-SEO:
<p>
  קראו את
  {' '}
  <a
    href="https://react.dev/reference/react/useRef"
    target="_blank"
    rel="noopener noreferrer"
  >
    התיעוד הרשמי של React על useRef
  </a>
  {' '}וגם את
  {' '}
  <a
    href="https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver"
    target="_blank"
    rel="noopener noreferrer"
  >
    מדריך MDN על ResizeObserver
  </a>
  .
</p>

🚀 סיכום

useRef הוא כלי גמיש לשמירת מצביעי DOM וערכים מתמשכים ללא רינדור. השתמש בו למדידות, פוקוס, טיימרים ולשליטה במחזור-חיים יחד עם useEffect.

למה ללמוד תכנות וסייבר ב-More-ways?

עולם הטכנולוגיה משתנה במהירות, והיום כבר לא מספיק רק לדעת לכתוב קוד. ב-More-ways אנחנו מאמינים בשילוב קריטי בין פיתוח Full-Stack, הבנת ארכיטקטורת רשתות, ושימוש מתקדם ב-בינה מלאכותית (AI). המדריך שלפניכם הוא רק טעימה מהידע המקצועי שאנו מעבירים בקורסים שלנו, הכוללים ליווי אישי, פרויקטים מעשיים והכנה לשוק העבודה המודרני.

האם אפשר ללמוד תכנות ללא ניסיון?

בוודאי. המסלולים שלנו ב-More-ways מונגשים גם למתחילים, עם דגש על חשיבה לוגית ובניית בסיס איתן לפני הצלילה לקוד המורכב.

איך AI משתלב בלימודי הייטק?

אנחנו מלמדים אתכם להשתמש בכלי AI כדי להאיץ את הפיתוח, לדבג קוד ביעילות ולבנות אפליקציות חכמות יותר בזמן קצר יותר.

מוכנים לקחת את הקריירה לשלב הבא?

מעבר לאתר More-ways הרשמי