חידת React: סטייט ופרופס
דנית התוכניתנית רצתה לכתוב קומפוננטה שמאפשרת להציג ערך וגם לערוך אותו. בשביל זה היא יצרה בתוך הקומפוננטה שדה State בשם isEditing עם הלוגיקה הבאה:
אם אנחנו במצב צפיה הערך של isEditing יהיה false ונציג אלמנט p עם הערך.
אם אנחנו במצב עריכה הערך של isEditing יהיה true ונציג את הערך בתוך input.
המעבר בין המצבים יהיה באמצעות לחיצה על כפתור שיופיע ליד הקומפוננטה. הקוד נראה כך:
function EditableText(props) {
const { value, setValue } = props;
const [ isEditing, setIsEditing ] = useState(false);
const inputRef = useRef(null);
function startEdit() {
setIsEditing(true);
}
function doneEdit() {
setValue(inputRef.current.value);
setIsEditing(false);
}
if (isEditing) {
return (
<>
<input type="text" ref={inputRef} defaultValue={value} />
<button onClick={doneEdit}>Save</button>
</>
);
} else {
return (
<>
<p>{value}</p>
<button onClick={startEdit}>Edit</button>
</>
);
}
}
ההרפתקנים שביניכם יכולים למצוא את הקוד עובד בקודסנדבוקס בקישור https://codesandbox.io/s/objective-cloud-x4zm7?file=/src/App.js.
אחרי שבועיים כל המחלקה התחילה להשתמש בקומפוננטה של דנית והחברים הגיעו עם דרישה חדשה: אם אפשר שהקומפוננטה תופיע אוטומטית במצב עריכה אם לא עבר ערך. אין בעיה אמרה דנית ועדכנה את שורת ה useState בקומפוננטה לגירסה הבאה:
const [isEditing, setIsEditing] = useState(!value);
האם התיקון של דנית עבד? למה? ואם לא, מה עוד צריך כדי שאם הערך ריק הקומפוננטה תמיד תופיע במצב עריכה?