【发布时间】:2021-08-22 16:04:30
【问题描述】:
我有一个组件,其中有这个 useEffect:
const [charactersInfo, setCharactersInfo] = useState(null);
const [page, setPage] = useState(1);
useEffect(() => {
fetch(`https://api/api/character/?page=${page}`)
.then((res) => res.json())
.then((result) => {
setCharactersInfo(result);
});
}, [page]);
每当我的page 状态更新时,都会有不同的数据来自 api 预期。但问题是每当新的setCharactersInfo(result) 发生时,它都不会显示新数据。
我将我的 setPage 状态函数作为道具传递给该组件:
<PaginationButtons
data={charactersInfo}
updatePage={(number) => {
setPage(number);
}}
/>
这是一个可重用的组件,它生成按钮,除了这个特定的组件外,它在任何地方都能正常工作。请问有什么建议吗?
import React, { useState, useEffect } from "react";
import "./PaginationButtons.css";
function PaginationButtons({ data, updatePage }) {
const [buttonsArr, setButtonsArr] = useState([]);
useEffect(() => {
const finalArray = [];
const { info } = data;
// Not the best solution for situations in which
// info.pages is big number(e.x 1000000) but since we know that
// it mostly will be 34 or less so we can just loop through it :)
for (let i = 1; i < info.pages + 1; i++) {
finalArray.push(
<button
className="page_button"
onClick={() => updatePage(i)}
key={Math.random()}
>
{i}
</button>
);
}
setButtonsArr(finalArray);
}, []);
return <div className="button_container">{buttonsArr.map((el) => el)}</div>;
}
export default PaginationButtons;
data prop 是一个包含各种东西的对象,上面是应该显示的页面数。在这种特定情况下,它是 34,所以我使用 state 和 useEffect 循环遍历这个数字并将按钮存储在 state 数组中,然后映射它
【问题讨论】:
-
您能否更新您的问题以包含所有相关代码?可以分享
PaginationButtons组件代码吗? -
@DrewReese 等一下
-
@DrewReese 我用 PaginationButtons 代码更新了问题
-
我认为你在 PaginationButtons 的 useEffect 中缺少数据依赖
标签: reactjs