Integrando o Hook useSearchParams
No componente de exemplo ProductsPage, o hook useSearchParams é integrado para gerenciar os 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>
</>
);
};
Aqui está uma análise do código:
- Importação das dependências necessárias:
useState,useEffecteuseSearchParamsdo React Router; - Inicialização do estado dentro do componente utilizando
useState. O estadocompaniesarmazena os dados a serem exibidos, e a funçãosetCompaniesé utilizada para atualizá-lo; - Criação da função
updateCompaniespara filtrar os dados com base nos parâmetros de consulta. A função recebe os parâmetros de consulta atuais como uma instância deURLSearchParamse os utiliza para filtrar odata. Neste caso, o filtro é feito pelo parâmetro "name"; - Utilização do hook
useEffectpara executar a funçãoupdateCompaniesquando o componente é montado e sempre que os parâmetros de consulta mudam. Isso garante que os dados exibidos estejam sincronizados com a URL; - A função
handleChangeatualiza o parâmetro de consulta "name" em resposta à entrada do usuário. Quando o campo de entrada é alterado, ela chamasetSearchParamscom o novo valor do parâmetro; - Na declaração de retorno do componente, é renderizado um campo de entrada para o usuário e uma lista de empresas baseada nos dados filtrados.
Este código demonstra como integrar useSearchParams e React Router para criar uma aplicação web dinâmica que responde a alterações nos parâmetros de consulta.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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
Integrando o Hook useSearchParams
Deslize para mostrar o menu
No componente de exemplo ProductsPage, o hook useSearchParams é integrado para gerenciar os 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>
</>
);
};
Aqui está uma análise do código:
- Importação das dependências necessárias:
useState,useEffecteuseSearchParamsdo React Router; - Inicialização do estado dentro do componente utilizando
useState. O estadocompaniesarmazena os dados a serem exibidos, e a funçãosetCompaniesé utilizada para atualizá-lo; - Criação da função
updateCompaniespara filtrar os dados com base nos parâmetros de consulta. A função recebe os parâmetros de consulta atuais como uma instância deURLSearchParamse os utiliza para filtrar odata. Neste caso, o filtro é feito pelo parâmetro "name"; - Utilização do hook
useEffectpara executar a funçãoupdateCompaniesquando o componente é montado e sempre que os parâmetros de consulta mudam. Isso garante que os dados exibidos estejam sincronizados com a URL; - A função
handleChangeatualiza o parâmetro de consulta "name" em resposta à entrada do usuário. Quando o campo de entrada é alterado, ela chamasetSearchParamscom o novo valor do parâmetro; - Na declaração de retorno do componente, é renderizado um campo de entrada para o usuário e uma lista de empresas baseada nos dados filtrados.
Este código demonstra como integrar useSearchParams e React Router para criar uma aplicação web dinâmica que responde a alterações nos parâmetros de consulta.
Obrigado pelo seu feedback!