Установка загрузчика с реактивными крючками

#reactjs #react-hooks #loader

#reactjs #реагирующие крючки #загрузчик

Вопрос:

Я пытаюсь установить загрузчик в своем веб-приложении React, но это ошибка, которая постоянно отображается:

 index.js:1 Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
    in RegistrazioneBici (at App.js:31)
    in Route (at App.js:27)
    in div (at App.js:24)
    in Router (created by BrowserRouter)
    in BrowserRouter (at App.js:22)
 

У меня есть компонент моего приложения, который содержит все возможные маршруты.

 const App = () => {
  const [loading, setLoading] = useState(false);

  return (
    <div>
      {loading === false ? (
        <>
          <Router>
            <Navbar2 />
            <div className="containerApp">
              <Route path="/" exact render={(props) => <Home />} />
             
              <Route
                path="/registrazionebici"
                exact
                render={(props) => (
                  <RegistrazioneBici
                    loading={loading}
                    setLoading={setLoading}
                    {...props}
                  />
                )}
              />        
              <Route
                path="/adminnotarizzazione"
                exact
                render={(props) => <Admin setLoading={setLoading} {...props} />}
              />
            </div>
            <Separatore color={"#eee"} />
            <Footer />
          </Router>
        </>
      ) : (
        <Loader />
      )}
    </div>
  );
};
 

и это код для RegistrationBici.js во время отправки формы:

 const handleSubmit = async (e) => {
    e.preventDefault();

    setModalShow(false);
    setHashCampi("");
    
    const isValid = await controllaCampi(); //validation of the fields
    if (isValid) {
      // setLoader(true);
      props.setLoading(true);

      responseHash = await eseguiHash( //hash of the fields
        nome,
        cognome,
        email,
        marca,
        modello,
        telaio
      );
      
      ... other dbcalls ....

      props.setLoading(false);
      setModalShow(true);
    } else {
      console.log("There is an error");
    }
    props.setLoading(false)
  };
 

Я попытался добавить состояние локально в Registrazione.js для того, чтобы ошибка исчезла, и она работает, но в этом случае загрузчик затмевает только содержимое файла, а не панель навигации.

Может кто-нибудь помочь мне решить эту проблему?

Комментарии:

1. Более того, это не ошибка, это предупреждение, которое необходимо исправить, чтобы избежать утечек памяти, и еще один вопрос: откуда берется этот props.setLoading, используйте useState() для обновления состояния. и оберните handleSubmit в useCallback, чтобы он не повторялся каждый раз, когда что-то обновляется.