【发布时间】:2023-04-05 12:34:01
【问题描述】:
我是新来的反应。我已经阅读了反应文档。我不知道为什么它不起作用。所以,我来到这里。
我正在尝试在反应中创建分页。下面是我的table 组件。
const Table = (props) => {
const { description, itemCount, tableHeaders, items } = props;
const pageSize = 5;
const [currentPage, setCurrentPage] = useState(1);
function handlePageChange(page) {
setCurrentPage(page);
}
const registerations = paginate(items, currentPage, pageSize);
// HERE: registerations data is correct and then I pass it to TableBody component.
return (
<React.Fragment>
<TableDescription description={description} count={itemCount} />
<div className="bg-white block w-full md:table">
<TableHeader items={tableHeaders} />
<TableBody items={registerations} />
</div>
{/* Footer & Pagination */}
<div className="bg-white block flex px-6 py-4 justify-between rounded-bl-lg rounded-br-lg">
<div className="sm:flex-1 sm:flex sm:items-center sm:justify-between">
<Pagination
itemsCount={items.length}
pageSize={pageSize}
currentPage={currentPage}
onPageChange={handlePageChange}
/>
</div>
</div>
{/* end Footer & Pagination */}
</React.Fragment>
);
并且该注册数组由 TableBody 组件接收。 TableBody 组件中的问题是我无法使用 useState 挂钩将 props 值设置为 state。
const { items: passedItems } = props;
console.log(passedItems); // ok -> I got what I passed.
const [items, setItems] = useState(passedItems);
console.log(items); // not ok -> items is previously passed items.
我怎样才能使它正确? 谢谢。
【问题讨论】:
-
为什么需要将它们保持在状态中?这就是 state 的行为方式——不是在每次渲染时都重新初始化
-
因为我需要跟踪哪些注册打开了 view-more btn。在我的 UI 中,我在每次注册时都有查看更多按钮。因此,如果我单击其中一个按钮,我会使用 setItems() 将 { popupVisivility = true } 设置到该注册对象中。然后重新渲染表格并显示弹出窗口。是否有其他方法或其他正确方法来获得该成就?
标签: javascript reactjs react-hooks use-effect use-state