React

React

Tutorial React: Navegación programática y redireccionamiento

React y React Router v6: Aprende a usar useNavigate para navegación programática y <Navigate> para redirecciones condicionales. Mejora la UX y seguridad de tu aplicación.

En React Router v6, useNavigate es un hook que se utiliza para realizar navegación programática dentro de una aplicación React. Este hook reemplaza al método useHistory utilizado en versiones anteriores de React Router. Proporciona una forma sencilla y directa para navegar a diferentes rutas desde el código, sin necesidad de interacción del usuario.

Para utilizar useNavigate, primero hay que importarlo desde react-router-dom:

// BotonNavegacion.jsx
import { useNavigate } from 'react-router-dom';

export default function BotonNavegacion() {
  const navigate = useNavigate();

  const handleClick = () => {
    navigate('/about');
  };

  return (
    <button onClick={handleClick}>
      Navegar a Ruta Destino
    </button>
  );
}

En este ejemplo, cuando el usuario hace clic en el botón, la aplicación navega programáticamente a la ruta /about.

useNavigate también permite pasar estado a la ruta destino. Esto puede ser útil para pasar información adicional que no se desea incluir en la URL:

// BotonNavegacionConEstado.jsx
import { useNavigate } from 'react-router-dom';

export default function BotonNavegacionConEstado() {
  const navigate = useNavigate();

  const handleClick = () => {
    navigate('/ruta-destino', { state: { userId: 123 } });
  };

  return (
    <button onClick={handleClick}>
      Navegar con Estado
    </button>
  );
}

En la ruta destino, se puede acceder al estado pasado mediante el hook useLocation:

// About.jsx
import { useLocation } from "react-router-dom";

export default function About() {
  const location = useLocation();
  const { userId } = location.state || {};

  return (
    <div>
      <h1>About Page</h1>
      <p>ID de Usuario: {userId}</p>
    </div>
  )
}

useNavigate también soporta la navegación hacia atrás y hacia adelante en el historial del navegador:

// BotonesNavegacionHistorial.jsx
import { useNavigate } from 'react-router-dom';

export default function BotonesNavegacionHistorial() {
  const navigate = useNavigate();

  const handleBack = () => {
    navigate(-1); // Navegar hacia atrás
  };

  const handleForward = () => {
    navigate(1); // Navegar hacia adelante
  };

  return (
    <div>
      <button onClick={handleBack}>
        Atrás
      </button>
      <button onClick={handleForward}>
        Adelante
      </button>
    </div>
  );
}

Redirecciones condicionales

En React Router v6, las redirecciones condicionales se pueden implementar de manera eficiente utilizando hooks como useNavigate y componentes como <Navigate>. Este enfoque permite redirigir a los usuarios a diferentes rutas basadas en ciertas condiciones lógicas, mejorando la experiencia del usuario y la seguridad de la aplicación.

Para realizar una redirección condicional, primero se debe importar useNavigate desde react-router-dom. Este hook permite la navegación programática en función de condiciones específicas. Un caso típico es redirigir a los usuarios no autenticados a una página de inicio de sesión.

// BotonAccesoCondicional.jsx
import { useNavigate } from 'react-router-dom';

export default function BotonAccesoCondicional({ userIsLoggedIn }) {
  const navigate = useNavigate();

  const handleNavigation = () => {
    if (!userIsLoggedIn) {
      navigate('/login');
    } else {
      navigate('/dashboard');
    }
  };

  return (
    <button onClick={handleNavigation}>
      Ir a Dashboard o Login
    </button>
  );
}

En este ejemplo, handleNavigation comprueba si el usuario está autenticado (userIsLoggedIn). Si no lo está, navega a la ruta /login; de lo contrario, navega a /dashboard.

Otra forma de realizar redirecciones condicionales es utilizando el componente <Navigate> dentro de la estructura de componentes JSX. Este método es útil cuando se necesita realizar una redirección como parte del renderizado del componente.

// ProtectedRoute.jsx
import { Navigate } from 'react-router-dom';

export default function ProtectedRoute({ isAuthenticated, children }) {
  if (!isAuthenticated) {
    return <Navigate to="/login" />;
  }
  return children;
}

En este ejemplo, el componente ProtectedRoute verifica si el usuario está autenticado. Si no lo está, el componente <Navigate> redirige automáticamente al usuario a la ruta /login, bloqueando el acceso a las rutas protegidas. Si el usuario está autenticado, el componente simplemente renderiza los children, permitiendo el acceso al contenido protegido.

Las redirecciones condicionales también pueden basarse en datos de la aplicación, como roles de usuario o permisos.

Ejemplo de como se redirige a los usuarios según su rol.

// BotonNavegacionPorRol.jsx
import { useNavigate } from 'react-router-dom';

export default function BotonNavegacionPorRol({ userRole }) {
  const navigate = useNavigate();

  const handleNavigation = () => {
    if (userRole === 'admin') {
      navigate('/admin-dashboard');
    } else if (userRole === 'user') {
      navigate('/user-dashboard');
    } else {
      navigate('/login');
    }
  };

  return (
    <button onClick={handleNavigation}>
      Navegar según el Rol
    </button>
  );
}

En este código, handleNavigation verifica el rol del usuario (userRole) y navega a diferentes rutas basándose en ese valor. Si el rol es 'admin', navega a /admin-dashboard; si es 'user', navega a /user-dashboard; de lo contrario, navega a /login.

Certifícate en React con CertiDevs PLUS

Ejercicios de esta lección Navegación programática y redireccionamiento

Evalúa tus conocimientos de esta lección Navegación programática y redireccionamiento con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de React

Accede a todas las lecciones de React y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A React Y Su Ecosistema

React

Introducción Y Entorno

Instalar React Y Crear Nuevo Proyecto

React

Introducción Y Entorno

Introducción A Jsx

React

Componentes

Introducción A Componentes

React

Componentes

Componentes Funcionales

React

Componentes

Eventos En React

React

Componentes

Props Y Manejo De Datos Entre Componentes

React

Componentes

Renderizado Condicional

React

Componentes

Renderizado Iterativo Con Bucles

React

Componentes

Manejo De Clases Y Estilos

React

Componentes

Introducción A Los Hooks

React

Hooks

Estado Y Ciclo De Vida De Los Componentes

React

Hooks

Hooks Para Manejo De Estado Y Efectos Secundarios

React

Hooks

Hooks Para Gestión De Estado Complejo Y Contexto

React

Hooks

Hooks Para Optimización Y Actualizaciones Concurrentes

React

Hooks

Introducción A React Router

React

Navegación Y Enrutamiento

Definición Y Manejo De Rutas

React

Navegación Y Enrutamiento

Rutas Anidadas Y Rutas Dinámicas

React

Navegación Y Enrutamiento

Navegación Programática Y Redireccionamiento

React

Navegación Y Enrutamiento

Nuevos Métodos Create De React Router

React

Navegación Y Enrutamiento

Solicitudes Http Con Fetch Api

React

Interacción Http Con Backend

Solicitudes Http Con Axios

React

Interacción Http Con Backend

Estado Local Con Usestate Y Usereducer

React

Servicios Y Gestión De Estado

Estado Global Con Context Api

React

Servicios Y Gestión De Estado

Estado Global Con Redux Toolkit

React

Servicios Y Gestión De Estado

Custom Hooks Para Servicios Compartidos

React

Servicios Y Gestión De Estado

Certificados de superación de React

Supera todos los ejercicios de programación del curso de React y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Utilizar el hook useNavigate para navegación programática en React Router v6.
  • Implementar redirecciones condicionales basadas en autenticación y roles de usuario.
  • Manejar el estado de navegación y pasar información a través de rutas.
  • Navegar hacia adelante y hacia atrás en el historial del navegador.
  • Utilizar el componente <Navigate> para redirigir usuarios dentro de la estructura JSX.