¿Cómo puedo añadir un sitio web de la pantalla de carga en ReactJS?

0

Pregunta

Soy realmente nuevo en ReactJs, JS y básicamente todo el desarrollo de la web. Estoy tratando de crear una página en la cartera de sitio web utilizando ReactJS y quería probar algunas de las técnicas más avanzadas, tales como el uso de ganchos. Quería crear un efecto simple, donde se reproduce una animación de una vez (primera vez que un usuario inicia sesión en mi sitio web), luego son llevados al sitio principal. Todos los recursos que he encontrado en línea se refieren a pantallas de carga mientras que la obtención de datos de una API. Aquí está mi código para la pantalla de carga:

import Typical from 'react-typical';
import "./Loading.scss";
import {useState, useEffect} from 'react';

const Loading = function Loading() {
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    setLoading(true)
    setTimeout(() => {
      setLoading(false)
    },18000);

  }, [])

        return (
      <div>
        <h1 id="loading">
          { loading ?  <Typical oop={1} wrapper = 'p'
          steps={[
              "Hello",
              2000,
              "My name is Leonard.",
              3000,
              "I am an aspiring developer",
              3000,
              "Welcome to my website!",
              3000,
            ]} /> : null}
        </h1>
      </div>
    );

}

Estoy usando un simple reaccionar paquete llamado típica que da a una bonita animación de las palabras que se escriben en la pantalla como una máquina de escribir, luego se elimina, entonces el siguiente fragmento de texto, se muestra etc.. esto sólo bucles una vez. He usado el useState y useEffect ganchos con un temporizador para setLoading a false en 18 años, que es cuando la animación se detiene. Como se puede ver que el render de la animación sólo si la carga es cierto, el uso de un operador ternario, a continuación, una vez que la carga se establece en false, entonces null se muestra. Mi app.js se parece a esto:

import Nav from './Components/Nav';
import "./App.scss";
import Loading from './Components/Loading';

function App() {
  return (
    <div>
      <Loading /> 
      <main>
      <Nav/>
      </main>

    </div>

    
  );
}

export default App;

(Disculpas por la terrible JSX). El problema que estoy teniendo es que tanto la barra de navegación y la pantalla de carga carga al mismo tiempo. Estoy seguro de cómo ocultar todos mis otros componentes hasta que la animación está terminado. Todo intento es waaay complicado y realmente no parece muy eficiente en todo. Agradezco cualquier ayuda gracias!

1

Mejor respuesta

1

La razón por la que ambos están mostrando al mismo tiempo porque en el app.js. Se dispone de la <Loading /> componente y el <Nav /> componente que se procesan en el mismo tiempo.

Hay dos soluciones que usted puede ir para

  1. Usted puede estilo de la carga del componente tome la pantalla completa, y lo cubre todo. Esto se puede hacer dando a la pantalla de carga de un id. Decir, loading-screen por ejemplo y hacer lo siguiente en el css:

    #loading-screen {
        position: absolute;
        width: 100%;
        height: 100%;
        background-color: white;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    

PERO asegúrese de que después de la carga que pasa el tiempo para ocultar la pantalla de carga de lo contrario, se va a mantener el bloqueo de la vista.

  1. Usted puede poner la carga de la lógica en la app.js en lugar de estar dentro de la componente de Carga. Usted puede tener es hacer que la Carga de los componentes de tan largo como el estado de carga es true en caso contrario cargar el resto de la aplicación (La barra de navegación, etc..). Puedes hacer algo como:

    function App() {
        const [loading, setLoading] = useState(true);
        useEffect(() => {
            setTimeout(() => {
                setLoading(false)
            }, 18000);
        }, []);
    
        return (
            <div>
                {loading ? (<Loading />) :
                    (
                        <main>
                            <Nav />
                        </main>
                    )
                }
            </div>
        );
    }
    
2021-11-24 00:53:42

¿Por qué no podemos utilizar la carga diferida de reserva como una carga de la cosa. No es que no dan el mismo resultado?
Perfectó

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................