Crear una alerta React cerrable

ReactReactBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, crearemos un componente de alerta cerrable (Closable Alert) utilizando React. El componente permitirá a los usuarios mostrar un mensaje de un tipo específico y cerrar la alerta una vez que hayan terminado con ella. Al final de este laboratorio, habrás aprendido cómo utilizar los hooks useState() y useEffect() para crear un componente dinámico que se puede personalizar fácilmente para adaptarse a tus necesidades.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/StateManagementGroup(["State Management"]) react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/FundamentalsGroup -.-> react/conditional_render("Conditional Rendering") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38340{{"Crear una alerta React cerrable"}} react/event_handling -.-> lab-38340{{"Crear una alerta React cerrable"}} react/conditional_render -.-> lab-38340{{"Crear una alerta React cerrable"}} react/hooks -.-> lab-38340{{"Crear una alerta React cerrable"}} react/use_state_reducer -.-> lab-38340{{"Crear una alerta React cerrable"}} end

Alerta Cerrable

index.html y script.js ya se han proporcionado en la máquina virtual (VM). En general, solo necesitas agregar código a script.js y style.css.

Renderiza un componente de alerta con la propiedad type.

El componente Alert recibe las siguientes propiedades:

  • isDefaultShown: un valor booleano que determina si la alerta se muestra inicialmente o no (el valor predeterminado es false).
  • timeout: un número que especifica la duración en milisegundos antes de que la alerta se desvanezca (el valor predeterminado es 250).
  • type: una cadena que determina el tipo de alerta (por ejemplo, "warning", "error", "info").
  • message: una cadena que contiene el mensaje a mostrar en la alerta.

El componente realiza lo siguiente:

  • Utiliza el hook useState() para crear las variables de estado isShown e isLeaving y las establece en false inicialmente.
  • Define una variable timeoutId para mantener la instancia del temporizador y limpiarla cuando el componente se desmonte.
  • Utiliza el hook useEffect() para actualizar el valor de isShown a true y limpiar el intervalo utilizando timeoutId cuando el componente se desmonte.
  • Define una función closeAlert para establecer que el componente se quite del DOM mostrando una animación de desvanecimiento y estableciendo isShown en false a través de setTimeout().
  • Renderiza el componente de alerta si isShown es true. El componente tiene los estilos adecuados según la propiedad type y se desvanece si isLeaving es true.

Aquí está el código:

@keyframes leave {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}

.alert {
  padding: 0.75rem 0.5rem;
  margin-bottom: 0.5rem;
  text-align: left;
  padding-right: 40px;
  border-radius: 4px;
  font-size: 16px;
  position: relative;
}

.alert.warning {
  color: #856404;
  background-color: #fff3cd;
  border-color: #ffeeba;
}

.alert.error {
  color: #721c24;
  background-color: #f8d7da;
  border-color: #f5c6cb;
}

.alert.leaving {
  animation: leave 0.5s forwards;
}

.alert.close {
  position: absolute;
  top: 0;
  right: 0;
  padding: 0 0.75rem;
  color: #333;
  border: 0;
  height: 100%;
  cursor: pointer;
  background: none;
  font-weight: 600;
  font-size: 16px;
}

.alert.close::after {
  content: "x";
}
const Alert = ({ isDefaultShown = false, timeout = 250, type, message }) => {
  const [isShown, setIsShown] = React.useState(isDefaultShown);
  const [isLeaving, setIsLeaving] = React.useState(false);

  let timeoutId = null;

  React.useEffect(() => {
    setIsShown(true);
    return () => {
      clearTimeout(timeoutId);
    };
  }, [isDefaultShown, timeout, timeoutId]);

  const closeAlert = () => {
    setIsLeaving(true);
    timeoutId = setTimeout(() => {
      setIsLeaving(false);
      setIsShown(false);
    }, timeout);
  };

  return (
    isShown && (
      <div
        className={`alert ${type} ${isLeaving ? "leaving" : ""}`}
        role="alert"
      >
        <button className="close" onClick={closeAlert} />
        {message}
      </div>
    )
  );
};
ReactDOM.createRoot(document.getElementById("root")).render(
  <Alert type="info" message="This is info" />
);

Haz clic en 'Go Live' en la esquina inferior derecha para ejecutar el servicio web en el puerto 8080. Luego, puedes actualizar la pestaña Web 8080 para ver una vista previa de la página web.

Resumen

¡Felicidades! Has completado el laboratorio de Alerta Cerrable (Closable Alert). Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.