Задать вопрос
Местоположение
Россия, Новгородская обл.

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (12)

Лучшие ответы пользователя

Все ответы (4)
  • Вопрос по JS от новичка?

    MiiZZo
    @MiiZZo
    JavaScript, React, NodeJS, Student
    Не знаю, насколько меня можно считать не новичком, но я довольно глубоко погружен в мир js.

    Мое мнение заключается в том, что, если вы хотите обладать максимально актуальной и истинной информацией, имея при этом наивысшее понимание, то в вашем процессе познания чего-либо необходимо использовать все. Документация, видео, статьи, issues и т.д.
    Аргументы таковы:
    • Если вы встретите неактуальную информацию, то вы сможете сразу это понять, т.к. на одно и тоже вы смотрите с разных ракурсов.
    • Если вы встречаете ложную информацию или откровенно некачественную, то вы сможете сразу это понять все по той же причине.
    • Если у вас возник недостаток понимания чего-либо, то вы сможете его наверстать, используя другие источники

    А говорить, что одно - хорошо, а другое - плохо, не приводя при этом аргументов, не имеет смысла. Можно найти плохую книгу, но найти при этом хорошее видео. Однако, мое отношение преломляется, когда мы говорим о платных курсах, подобные вещи крайне не рекомендую, т.к. инициатива подобных мероприятий одна - заработать денег. И я множество раз натыкался на курсы, где цена может равняться хоть 70к, но при этом содержание курса неприлично показывать даже на бесплатной основе.
    Ответ написан
    Комментировать
  • Почему при изменении состояния react-компонента в setInterval, значение состояния каждый раз сбрасывается к исходному?

    MiiZZo
    @MiiZZo Автор вопроса
    JavaScript, React, NodeJS, Student
    Пояснение из документации React:
    https://ru.reactjs.org/docs/hooks-faq.html#what-ca...
    function Counter() {
      const [count, setCount] = useState(0);
    
      useEffect(() => {
        const id = setInterval(() => {
          setCount(count + 1); // Этот эффект зависит от переменной состояния `count`
        }, 1000);
        return () => clearInterval(id);
      }, []); //  Баг: `count` не указан в качестве зависимости
    
      return <h1>{count}</h1>;
    }

    Пустой набор зависимостей [] означает, что эффект будет выполняться только один раз, когда компонент монтируется, а не при каждом повторном рендере. Проблема в том, что внутри обратного вызова setInterval значение count не изменяется, потому что мы создали замыкание со значением count, установленным в 0, как это было при выполнении обратного вызова эффекта. Каждую секунду этот обратный вызов вызывает setCount(0 + 1), поэтому счетчик никогда не превышает 1.

    Если переписать список зависимостей как [count], то баг будет устранён, но это приведёт к сбрасыванию интервала при каждом изменении. Такое поведение может быть нежелательно. Чтобы исправить это, мы можем применить форму функционального обновления хука setState, которая позволяет указать, как должно меняться состояние, не ссылаясь явно на текущее состояние:

    function Counter() {
      const [count, setCount] = useState(0);
    
      useEffect(() => {
        const id = setInterval(() => {
          setCount(c => c + 1); // ✅ Эта строчка не зависит от внешней переменной `count`
        }, 1000);
        return () => clearInterval(id);
      }, []); // ✅ Наш эффект не использует никаких переменных из области видимости компонента
    
      return <h1>{count}</h1>;
    }
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (50)