gpt4 book ai didi

reactjs - 调用 mutate 时 SWR 不重新渲染

转载 作者:行者123 更新时间:2023-12-05 03:43:27 29 4
gpt4 key购买 nike

我正在尝试使用 SWR 和 SSR 创建带分页的产品列表。为此,我将初始数据传递给 SWR,当分页发生变化时,我调用一个 mutate 函数,绑定(bind)到第一个 SWR 请求。

问题是页面没有重新呈现,当我打印 mutate 函数的结果时,我看到数据已经更改但页面没有重新呈现,我不明白为什么.

代码:

const ProductList = ({initialData, endpoint, productLimit, productCount}) => {
const [pageIndex, setPageIndex] = useState(1)
const [isLoading, setIsLoading] = useState(false);

console.log(`${endpoint}?_limit=${productLimit}&_start=${pageIndex * productLimit ?? 0}`)
const {data, mutate} = useSWR(
`${endpoint}?_limit=${productLimit}&_start=${pageIndex * productLimit ?? 0}`,
fetcher,
{initialData: initialData}
)

return (
<div className={cls([styles.product_list_container])}>
<div>
<div className={cls([styles.product_list])}>
{data.map(product => {
return (
<ProductCard productData={product}/>
)
})}
</div>
<Pagination
pageIndex={pageIndex}
onclick={async (index) => {
setPageIndex(index);
setIsLoading(true)
mutate().then(resp => {
setIsLoading(false)
})
}}
pageNumber={Math.ceil(productCount / (productLimit) - 1)}/>

</div>
{isLoading &&
<LoadingBackdrop/>
}
</div>
)
}

最佳答案

当提供 initialData 时,您还需要在选项中设置 revalidateOnMount: true 否则它将始终只返回初始数据:

const {data} = useSWR(
`${endpoint}?_limit=${productLimit}&_start=${pageIndex * productLimit ?? 0}`,
fetcher,
{
initialData: initialData,
revalidateOnMount: true,
},
)

Edit eager-darwin-qckch

关于reactjs - 调用 mutate 时 SWR 不重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66814548/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com