Integración del Hook useSearchParams
En el componente de ejemplo ProductsPage, se integra useSearchParams para gestionar los parámetros de consulta.
import React, { useState, useEffect } from "react";
import { useSearchParams } from "react-router-dom";
const ProductsPage = ({ data }) => {
const [companies, setCompanies] = useState(data);
const [searchParams, setSearchParams] = useSearchParams();
// Function to update the displayed `companies` based on query parameters
const updateCompanies = (params) => {
const filteredCompanies = data.filter((item) => {
const { companyName } = item;
if (params.get("name")) {
return companyName.toLowerCase().includes(params.get("name"));
}
return true;
});
setCompanies(filteredCompanies);
};
useEffect(() => {
// When the component mounts or query parameters change, update the displayed `companies`
updateCompanies(searchParams);
}, [searchParams, data]);
// Function to update query parameters based on user input
const handleChange = (e) => {
const newName = e.target.value;
setSearchParams({ name: newName });
};
return (
<>
<input
type="text"
value={searchParams.get("name") || ""}
onChange={handleChange}
/>
<ul className="companyList">
{companies.map(({ id, companyName, companyDescription }) => (
<li key={id}>
<h2>{companyName}</h2>
<p>{companyDescription}</p>
</li>
))}
</ul>
</>
);
};
A continuación se presenta un desglose del código:
- Se importan las dependencias necesarias:
useState,useEffectyuseSearchParamsde React Router; - Se inicializa el estado dentro del componente utilizando
useState. El estadocompaniesalmacena los datos que se mostrarán, y se utiliza la funciónsetCompaniespara actualizarlos; - Se crea una función
updateCompaniespara filtrar los datos en función de los parámetros de consulta. La función recibe los parámetros de consulta actuales como una instancia deURLSearchParamsy los utiliza para filtrar losdata. En este caso, filtra por el parámetro "name"; - Se utiliza el hook
useEffectpara ejecutar la funciónupdateCompaniescuando el componente se monta y cada vez que los parámetros de consulta cambian. Esto garantiza que los datos mostrados se mantengan sincronizados con la URL; - La función
handleChangeactualiza el parámetro de consulta "name" en respuesta a la entrada del usuario. Cuando el campo de entrada cambia, llama asetSearchParamscon el nuevo valor del parámetro; - En la declaración de retorno del componente, se renderiza un campo de entrada para la interacción del usuario y una lista de empresas basada en los datos filtrados.
Este código demuestra cómo integrar useSearchParams y React Router para crear una aplicación web dinámica que responde a los cambios en los parámetros de consulta.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain how `useSearchParams` works in this example?
What happens if the user clears the input field?
How can I add more filters using query parameters?
Awesome!
Completion rate improved to 4.17
Integración del Hook useSearchParams
Desliza para mostrar el menú
En el componente de ejemplo ProductsPage, se integra useSearchParams para gestionar los parámetros de consulta.
import React, { useState, useEffect } from "react";
import { useSearchParams } from "react-router-dom";
const ProductsPage = ({ data }) => {
const [companies, setCompanies] = useState(data);
const [searchParams, setSearchParams] = useSearchParams();
// Function to update the displayed `companies` based on query parameters
const updateCompanies = (params) => {
const filteredCompanies = data.filter((item) => {
const { companyName } = item;
if (params.get("name")) {
return companyName.toLowerCase().includes(params.get("name"));
}
return true;
});
setCompanies(filteredCompanies);
};
useEffect(() => {
// When the component mounts or query parameters change, update the displayed `companies`
updateCompanies(searchParams);
}, [searchParams, data]);
// Function to update query parameters based on user input
const handleChange = (e) => {
const newName = e.target.value;
setSearchParams({ name: newName });
};
return (
<>
<input
type="text"
value={searchParams.get("name") || ""}
onChange={handleChange}
/>
<ul className="companyList">
{companies.map(({ id, companyName, companyDescription }) => (
<li key={id}>
<h2>{companyName}</h2>
<p>{companyDescription}</p>
</li>
))}
</ul>
</>
);
};
A continuación se presenta un desglose del código:
- Se importan las dependencias necesarias:
useState,useEffectyuseSearchParamsde React Router; - Se inicializa el estado dentro del componente utilizando
useState. El estadocompaniesalmacena los datos que se mostrarán, y se utiliza la funciónsetCompaniespara actualizarlos; - Se crea una función
updateCompaniespara filtrar los datos en función de los parámetros de consulta. La función recibe los parámetros de consulta actuales como una instancia deURLSearchParamsy los utiliza para filtrar losdata. En este caso, filtra por el parámetro "name"; - Se utiliza el hook
useEffectpara ejecutar la funciónupdateCompaniescuando el componente se monta y cada vez que los parámetros de consulta cambian. Esto garantiza que los datos mostrados se mantengan sincronizados con la URL; - La función
handleChangeactualiza el parámetro de consulta "name" en respuesta a la entrada del usuario. Cuando el campo de entrada cambia, llama asetSearchParamscon el nuevo valor del parámetro; - En la declaración de retorno del componente, se renderiza un campo de entrada para la interacción del usuario y una lista de empresas basada en los datos filtrados.
Este código demuestra cómo integrar useSearchParams y React Router para crear una aplicación web dinámica que responde a los cambios en los parámetros de consulta.
¡Gracias por tus comentarios!