You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中router push重定向后列表页数据更新延迟问题求助

问题解决方法

问题根源

你遇到的延迟是因为SWR默认优先返回缓存数据,后台才会异步重新验证更新缓存,所以跳转后看到的是旧缓存;而列表页的!jobsdata判断只在首次加载时生效,有缓存后就不会触发PageLoader。

具体解决方案

1. 提交表单后主动刷新SWR缓存

在表单页导入SWR的配置钩子,提交成功后主动标记对应缓存失效,强制列表页重新请求最新数据:

import { useSWRConfig } from 'swr'
import { useRouter } from 'next/router'
import { useForm } from 'react-hook-form'

// ... 其他组件代码
const { mutate } = useSWRConfig()
const router = useRouter()

const onSubmit = handleSubmit(async (data) => {
    setLoading(true)

    try {
        await axios.post('/api/jobs', data)
        // 主动让/api/jobs的缓存失效,触发重新请求
        await mutate('/api/jobs')
        router.push('/jobs')
    } catch (error) {
        setShowErrors(error.response.data.errors)
    } finally {
        setLoading(false)
    }
})

2. 优化列表页的加载状态判断

改用SWR返回的isLoading状态控制PageLoader,这样即使有缓存,重新请求时也会显示加载:

const { data: jobsdata, error, isLoading } = useSWR('/api/jobs', () => 
    axios.get('/api/jobs')
        .then(response => response.data.data)
)

// 正在加载(包括首次加载和重新验证)时显示加载组件
if (isLoading) {
    return (<PageLoader />)
}

if (error) {
    return <div>加载失败,请重试</div>
}

原理说明

  • mutate('/api/jobs')会直接让SWR中该key的缓存失效,跳转后列表页会立即发起新请求获取最新数据,不用等缓存自动过期。
  • isLoading能覆盖首次加载和重新验证两种场景,解决提交后跳转不显示加载的问题。

内容的提问来源于stack exchange,提问作者BigJobbies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:12:10