如何使用给定的初始值进行 useSWR 突变?

How to make useSWR mutations with a given initial value?

问题是,如果我删除初始值,那么一切正常。 我认为没有缓存具有初始值的数据。但我不知道如何解决这个问题。 如果初始数据发生变异 return 未定义。

在页面组件中:

  const { data, error } = useSWR("/api/company/", {
    initialData: company,
  });
export const getServerSideProps: GetServerSideProps<IManage> = async (ctx) => {
  ensureAuth(ctx);
  let company: ICompany[] | null = null;
  await instanceWithSSR(ctx) // axios config
    .get(`/api/company/`)
    .then((response) => {
      company = response?.data;
    })
    .catch((error) => {
      console.log(error);
    });
  return {
    props: {
      company: company || null,
    },
  };
};

我的突变:

  mutate(url, async (company: ICompany[]) => {
    console.log(company)
    if (company) {
      return [...company, companyItem];
    }
  }, false);

我不确定你的公司有效载荷,但对于初始值,它在装载时不会重新验证,所以你需要将 revalidateOnMount 设置为 true。

 const { data, error, mutate } = useSWR("/api/company/", {
    initialData: company,
    revalidateOnMount: true
  });

useSWR 还提供定位突变,因此您无需在同一组件中提供 url。

mutate(async(prev) => [...prev, companyItem])

我使用的是swr 1.2.2版本。看起来在 1.0 版本之后 initialData 不再存在。它替换为 fallbackData