SvelteKit 的存储与客户端和服务器端不匹配。

3
在SvelteKit中,似乎存储不会在客户端和服务器端之间同步。换句话说,如果在客户端上修改了一个存储,当在服务器端检索它时,它将不会被修改,反之亦然。
您可以在下面的最小可重现示例中看到这种行为:

https://stackblitz.com/edit/sveltejs-kit-template-default-fpp2y8?file=src/routes/+page.svelte

我的问题是:在客户端上如何修改服务器端存储的惯用方式或正常方式是什么?

为了避免XY问题,我要具体做的是:

EPOS系统的用户有一个“currentSale”存储,该存储在访问服务器端的/epos路由时加载,特别是为了Prisma可以获取有关产品、附加客户等更多信息。

然而,当用户尝试增加EPOS销售中产品的数量时,问题就出现了。尝试更新存储不起作用,因为它不保存在服务器端。使用整个API路由或表单操作似乎过度和不优化/最佳。

1个回答

4

首先,您不应该尝试在服务器上使用存储;它们并不是为此而设计的。

使用整个API路由或表单操作似乎过于繁琐且不优化/最佳。

当您想要修改服务器上的数据时,这正是您应该使用的。我不喜欢API路由,因为它们相当有限且冗长,但表单操作非常灵活,因为同一页可以存在多个命名操作。


我明白了。那么我应该如何存储这些数据呢?由于 Prisma 仅允许服务器端访问,因此需要在服务器端加载,但同时,为了快速响应和修改,它也需要在客户端进行编辑。我考虑使用 localStorage,但它也有类似的缺陷,即只能在客户端使用。我是否遗漏了一些 Svelte/SvelteKit 的功能,或者我应该如何处理这个问题? - Basil
1
商店有非常具体的目的,大多数情况下您根本不需要它们。组件内的所有状态默认都是响应式的。如果数据来自服务器,则应由load函数提供,如果必须在服务器上执行,请将其放在+page.server.js/ts中。如果通过表单操作更改了某些内容,则数据会自动失效并重新加载,如果使用enhance,则可以重新加载。 - H.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接