import React, { useEffect, useRef, useState } from "react"; function usePrevious(value) { const ref = useRef(); useEffect(() => { ref.current = value; }); return ref.current; } export default function Todo(props) { const [isEditing, setEditing] = useState(false); const [newName, setNewName] = useState(''); const editFieldRef = useRef(null); const editButtonRef = useRef(null); const wasEditing = usePrevious(isEditing); function handleChange(e) { setNewName(e.target.value); } function handleSubmit(e) { e.preventDefault(); if (!newName.trim()) { return; } props.editTask(props.id, newName); setNewName(""); setEditing(false); } const editingTemplate = (
); const viewTemplate = (
props.toggleTaskCompleted(props.id)} />
); useEffect(() => { if (!wasEditing && isEditing) { editFieldRef.current.focus(); } if (wasEditing && !isEditing) { editButtonRef.current.focus(); } }, [wasEditing, isEditing]); return
  • {isEditing ? editingTemplate : viewTemplate}
  • ; }