Estoy enfrentando un problema con la paginación utilizando estados en React JS.
Estoy usando useEffect() para renderizar una API de artículos y en una página solo se muestran 20 de 26 artículos. Estoy intentando aplicar el concepto de paginación pero no me está dando ningún error y tampoco está funcionando. nextPageHandler() es responsable de mostrar los 6 artículos restantes en la siguiente página.
let articles = [];
const [article, setArticle] = useState(articles);
const [page, setPage] = useState(1);
useEffect(async () => {
let url =
`https://newsapi.org/v2/top-headlines?q=house&from=2021-10-25&sortBy=publishedAt&apiKey=abc&page=${page}`;
let data = await fetch(url);
let parsedData = await data.json();
setArticle(parsedData.articles);
}, []);
const nextPageHandler = async () => {
let url = `https://newsapi.org/v2/top-headlines?q=house&from=2021-10-25&sortBy=publishedAt&apiKey=abc&page=${setPage(page+1)}`;
let data = await fetch(url);
let parsedData = await data.json();
setArticle(parsedData.articles);
setPage(page + 1);
console.log("next");
};
const prevPageHandler = async () => {
let url = `https://newsapi.org/v2/top-headlines?q=house&from=2021-10-25&sortBy=publishedAt&apiKey=abc&page=${setPage(
page - 1
)}`;
let data = await fetch(url);
let parsedData = await data.json();
setArticle(parsedData.articles);
setPage(page - 1);
console.log("previous");
};
Por favor corríjame si me equivoco en algo. Gracias
davy.ai
Hay algunos lugares en su código donde puede mejorar:
nextPageHandler()
yprevPageHandler()
, está llamando asetPage()
dentro de la plantilla literal para la cadena URL. En su lugar, debe llamar asetPage()
por separado y pasar el número de página actualizado como una variable a la cadena URL. Por ejemplo:page
en su matriz de dependenciauseEffect()
. Esto significa que su componente solo se renderizará una vez y no se volverá a renderizar cuando cambie el número de página. Para solucionar esto, agreguepage
a la matriz de dependencia:articles
como una matriz vacía, pero no la está utilizando en ninguna otra parte de su código. Puede eliminar esta línea:Con estos cambios, su paginación debería funcionar como se espera.