Inicio > Cursos > React > Query Params y Navigation State
ReactReact Router y NavegaciónLección 14 de 21

Query Params y Navigation State

Los query params son los parámetros que van después del ? en una URL: /productos?categoria=electronica&orden=precio. Son diferentes a los parámetros de ruta (:id): mientras /producto/42 identifica un recurso único y específico, los query params configuran cómo filtrar o mostrar los datos. Son ideales para búsquedas y filtros porque persisten en la URL: el usuario puede copiar el link y compartirlo, y quien lo abra verá exactamente los mismos resultados filtrados.

useSearchParams funciona igual a useState pero el estado vive en la URL en lugar de en memoria del componente. La ventaja: el estado sobrevive recargas de página y el usuario puede compartir la URL con filtros incluidos. La desventaja: la URL solo almacena strings, por lo que números y booleanos necesitan parsearse manualmente (Number(searchParams.get("precio"))). Para e-commerce, dashboards analytics, y buscadores con múltiples filtros, useSearchParams es la herramienta correcta.

import { useSearchParams, useLocation } from "react-router-dom";

// Query params: /productos?categoria=tech&orden=precio
function ListaProductos() {
  const [searchParams, setSearchParams] = useSearchParams();

  const categoria = searchParams.get("categoria") || "todos";
  const orden = searchParams.get("orden") || "nombre";

  const cambiarCategoria = (nuevaCategoria) => {
    setSearchParams(prev => {
      prev.set("categoria", nuevaCategoria);
      return prev;
    });
  };

  return (
    <div>
      <div>
        {["todos", "tech", "ropa"].map(cat => (
          <button key={cat} onClick={() => cambiarCategoria(cat)}>
            {cat}
          </button>
        ))}
      </div>
      <p>Mostrando: {categoria}, orden: {orden}</p>
    </div>
  );
}

// Estado en navegación (no persiste en URL)
function PaginaA() {
  const navigate = useNavigate();

  return (
    <button onClick={() =>
      navigate("/pagina-b", { state: { usuarioId: 42, mensaje: "Hola" } })
    }>
      Ir con datos
    </button>
  );
}

function PaginaB() {
  const location = useLocation();
  const { usuarioId, mensaje } = location.state || {};

  return <p>Usuario {usuarioId}: {mensaje}</p>;
}
Consejo📍 Los query params (?clave=valor) son visibles en la URL y persisten al recargar. El navigation state no aparece en la URL y se pierde al recargar.
← Parámetros y Rutas AnidadasRutas Protegidas y Autenticación →

Practica esta lección

Resuelve los ejercicios del curso de React en la app, gratis y con corrección automática.

Empezar a practicar