כתיבת קוד — שיעור 17
React: קומפוננטות, State ו-Props
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T2 · בסיסי200 נק'~15 דק'debug
תיקון באג — אל תשנה state (immutability)
הפונקציה מדמה עדכוני state ב-React ומחזירה היסטוריה של המצבים אחרי כל פעולה. אך היא שוברת את כלל-הזהב של React: היא *משנה* את אותו אובייקט state במקום ליצור חדש, ולכן כל רשומות ההיסטוריה מצביעות לאותו אובייקט ומראות את הערך הסופי. תקן כך שכל צעד יפיק עותק חדש (state בלתי-משתנה).
// הקוד השבור לתיקון
def apply_actions(initial, actions):
state = initial; history = []
for a in actions:
if a['type'] == 'inc': state['count'] += a.get('by', 1)
elif a['type'] == 'reset': state['count'] = 0
history.append(state) # באג כאן
return historyדוגמאות
apply_actions({'count':0}, [{'type':'inc','by':1}, {'type':'inc','by':2}]) → [{'count': 1}, {'count': 3}]
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~25 דק'algorithmic
useReducer — ניהול רשימת משימות
ממש reducer בסגנון useReducer של React לניהול רשימת משימות. מצב התחלתי: {'todos': [], 'nextId': 1}. עבד רשימת actions לפי הסדר: {'type':'add','text':t} מוסיף משימה {'id':nextId,'text':t,'done':False} ומקדם nextId · {'type':'toggle','id':i} הופך done · {'type':'remove','id':i} מסיר · {'type':'clear_done'} מסיר את כל שהושלמו. החזר את המצב הסופי.
דוגמאות
add 'x', add 'y', toggle id=1, clear_done → {'todos': [{'id':2,'text':'y','done':False}], 'nextId': 3}
הפתרון נשמר מקומית אוטומטית.