Задача

Компонент грузит пользователя по userId и подписывается на таймер. Найти и исправить ошибки: бесконечные ререндеры, утечку и неверные зависимости.

function UserWidget({ userId }) {
    const [user, setUser] = useState(null);
    const [seconds, setSeconds] = useState(0);
 
    // загрузка пользователя
    useEffect(() => {
        fetch(`/api/users/${userId}`)
            .then((r) => r.json())
            .then(setUser);
    }); 
 
    // счётчик секунд на экране
    useEffect(() => {
        setInterval(() => {
            setSeconds(seconds + 1);
        }, 1000);
    }, []);
 
    return (
        <div>
            <p>{user?.name}</p>
            <p>On page: {seconds}s</p>
        </div>
    );
}

Разбор ошибок

Решение

См. также