"use client";
import getUsers from "@/src/lib/service/user/GetUsers";
import { Avatar, Pagination } from "@mui/material";
import { useRouter } from "next/navigation";
import { useSearchParams } from "next/navigation";
import {
QueryClient,
QueryClientProvider,
useQuery,
} from "@tanstack/react-query";
import { useState } from "react";
const queryClient = new QueryClient();
function UsersListInner() {
const searchParams = useSearchParams();
const router = useRouter();
const [currentPage, setCurrentPage] = useState<number>(
Number(searchParams.get("page") || 1)
);
const { data } = useQuery({
queryKey: ["userList", currentPage],
queryFn: () => getUsers({ page: currentPage }),
staleTime: 0
},);
const handleChange = (event: React.ChangeEvent<unknown>, value: number) => {
router.push(`?page=${value}`);
setCurrentPage(value);
};
const totalPage = Math.ceil(
(data?.pagination.total_count || 1) / (data?.pagination.item_per_page || 1)
);
return (
<div>
{data?.data.map((u) => (
<div className="border-b p-4 flex gap-2 items-center" key={u.id}>
<Avatar src="/images/person.svg" />
<div>{u.fullName}</div>
<div dir="ltr">{u.phone}</div>
</div>
))}
{data && (
<Pagination
page={currentPage}
count={totalPage}
onChange={handleChange}
/>
)}
</div>
);
}
export default function UsersList() {
return (
<QueryClientProvider client={queryClient}>
<UsersListInner />
</QueryClientProvider>
);
}
当您看到这是
client组件我已经使用
Tanstack进行缓存。
当我单击下一页时,路由(?页面:2)获取更新并调用API,但显示了先前的数据。问题是什么? 我可以解决这个问题吗?
您认为下一个JS的最佳实践分页是什么?我可以找到错误,这是导致省略搜索参数的fetch api中的一个错误。
但我仍然不喜欢这种方法是最好的做法,请help
我找到了分页的最佳方法。