reactjs - SWR Hook 不反射(reflect)数据库更改

标签 reactjs aws-lambda next.js swr

此组件用于计算部署在 AWS Lambda 上的 Next.js 应用程序页面级别的浏览量

function ViewsCounter({ slug }: { slug: string }) {
  const { data } = useSWR(`/api/views/${slug}`, fetcher);
  const views = new Number(data?.total);

  useEffect(() => {
    const registerView = () =>
      fetch(`/api/views/${slug}`, { method: "POST" })
        .catch(console.log);
    registerView();
  }, [slug]);

  return (
    <>
      {views}
    </>
  );
}

这个是用来在首页显示view

function ViewsDisplay({ slug }: { slug: string }) {
  const { data } = useSWR(`/api/views/${slug}`, fetcher);
  const views = new Number(data?.total);

  return (
    <>
      {views}
    </>
  );
}

虽然它在本地主机上按预期工作,但看起来它只显示第一个获取的值并且出于某种原因不会重新验证它。
访问页面时,Counter被正确触发,DB中的值发生变化。
可能与变异有关,欢迎提供任何提示。

最佳答案

useSWR 默认情况下不会自动重新获取数据。

您可以使用 refreshInterval 启用自动重新获取选项。

const { data } = useSWR(`/api/views/${slug}`, fetcher, { refreshInterval: 1000 });

或者使用 mutation 自己显式更新数据在向 API 发出 POST 请求之后。

function ViewsCounter({ slug }: { slug: string }) {
    const { data, mutate } = useSWR(`/api/views/${slug}`, fetcher);
    const views = new Number(data?.total);

    useEffect(() => {
        const registerView = () =>
            fetch(`/api/views/${slug}`, { method: "POST" })
                .then(() => {
                    mutate();
                })
                .catch(console.log);
        registerView();
    }, [slug]);

    return (<>{views}</>);
}

关于reactjs - SWR Hook 不反射(reflect)数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69836403/

相关文章:

python - 如何将 Python 库 'matplotlib' 部署为 AWS 中的 Lambda 层?

javascript - 无法在 Nextjs 中加载 Expo 矢量图标

javascript - Next.js 类型错误 : Cannot set properties of undefined (setting 'hook' )

reactjs - 如何在react-router goBack方法中发送自定义数据,例如推送和替换方法?

javascript - 如何使用带样式的组件来设置组件打印的样式?

javascript - 当我将父类传递给子类时重新渲染值

javascript - 如何在React中动态加载脚本

regex - 如何在 AWS Lambda 上导入正则表达式

amazon-web-services - AWS SDK Go Lambda 单元测试

javascript - 我必须在 Next.js 项目中使用 express 吗?