Mukyuu Ответов: 1

React - превышена максимальная глубина обновления


Привет,

У меня есть ошибка с моим приложением React:
<pre>index.js:1 Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.
    in App (at src/index.js:8)
    in StrictMode (at src/index.js:7)

Мой код находится в моем Репо GitHub. Файл, в котором произошла ошибка, находится в мой App.js файл. Прокрутите вниз, и ошибка будет там, где // Сохранить для загрузки раздел есть.

Пожалуйста, помогите, спасибо!

Что я уже пробовал:

Я искал в StackOverflow, CodeProject и в интернете и пытался исправить это сам, но не смог найти ничего, что решило бы мою проблему.

Sandeep Mewara

Вам нужно поделиться кодом, в частности строкой, вызывающей ошибку.

Или же ответ на ваш запрос уже общий: "это может произойти, когда компонент вызывает setState внутри useEffect, но useEffect либо не имеет массива зависимостей, либо одна из зависимостей изменяется при каждом рендеринге."

Mukyuu

Извините, я забыл 😊

Я только что обновил свой вопрос.

EDIT: правильно, теперь я знаю, почему возникает ошибка. Я использовал 2 функции useEffects (), но мне нужны обе из них. Как я могу использовать и то, и другое, не вызывая ошибки?

1 Ответов

Рейтинг:
5

Mukyuu

Да! Я решил эту проблему! Это было из-за useEffect(), но не потому, что он использовался дважды.

Проблема заключалась в том, что я не добавил пустой массив в свою функцию useEffect (), чтобы она выполнялась только один раз:

// Save to Load
  const saveLocalTodos = () => {
    localStorage.setItem("todos", JSON.stringify(todos));
  };
  const getLocalTodo = () => {
    if (localStorage.getItem("todos") === null) {
      localStorage.setItem("todos", JSON.stringify([]));
    } else {
      let todoLocal = JSON.parse(localStorage.getItem("todos"));
      setTodos(todoLocal);
    }
  };
  useEffect(() => {
    getLocalTodo();
  }, []);


Но спасибо @SandeepMewara за вашу помощь! 😃