如何使用 SWR 钩子中的查询参数进行变异?

How to mutate with query params in SWR hook?

目前我正在使用 SWR 来获取数据,我尝试使用 SWR 的 Mutation 功能来重新获取新数据,但是当我通过以下方式调用 mutate() 时出现了问题key 添加了新的查询参数。

我的代码不起作用:

import useSWR, { useSWRConfig } from 'swr'

function Profile () {
  const { mutate } = useSWRConfig()
  const { data } = useSWR('/api/post', fetcher)

  return (
    <div>

      <h1>Title post {data.title}.</h1>

      <button onClick={() => {            
        mutate('/api/post?author=1&pricing=1')
      }}>
        View more information of this post!
      </button>

    </div>
  )
}

我从 SWR 阅读了文档,我知道 mutate 的键应该与 useSWR() 中的键相同,但在我的情况下需要更多查询参数来获取相应的数据

我该如何解决这个问题? 请帮助我!

我不建议在这种情况下使用 mutate,因为您要在突变中使用的 key(URL)与原始的不同。当 mutate 被调用时,它将更新 '/api/post' 的缓存,然后它将包含来自 '/api/post?author=1&pricing=1' 的数据。

作为替代方案,我建议您在 useSWR 调用中将 key 设为一个数组,以便可以将多个参数传递给 fetcher.

const [queryParams, setQueryParams] = useState('')
const { data } = useSWR(['/api/post', queryParams], fetcher)

然后,在您的按钮 onClick 处理程序中,您可以更新 queryParams 状态值以触发重新呈现并使用查询参数发起新请求。

<button onClick={() => {            
    setQueryParams('?author=1&pricing=1')
}}>
    View more information of this post!
</button>

您还需要稍微修改 fetcher 函数以期望有多个参数,并将您传递的查询参数附加到 URL.

const fetcher = (url, queryParams = '') => {
    // Example fetch to demonstrate the logic
    return fetch(`${url}${queryParams}`)
}

通过此更改,您现在为每个 URL 请求提供了不同的密钥(和缓存数据)。