SvelteKit中Getter&Setter异常:后端更新变量前端无法同步?
问题解答
核心原因
这是因为前端浏览器环境和后端Node.js环境是完全独立的运行实例,你在lib/count.js里定义的count变量,会在两个环境中各自创建一份独立的副本,二者完全不共享内存空间。
具体运行逻辑
- 当用户打开前端页面时,
+page.svelte及依赖的lib/count.js会在浏览器中执行,此时浏览器内存里会生成一个count变量,初始值为0。 - 当点击「call API」触发后端接口时,
api/+server.js及依赖的lib/count.js会在Node.js服务器环境中执行,此时服务器内存里会生成另一个完全独立的count变量,调用setCount(1)修改的只是这个服务器端的副本。 - 前端的
count副本从未被修改过,所以点击「get Count」时,打印的还是初始的0。
解决思路
如果需要实现前后端状态同步,你需要借助外部共享存储或者接口返回更新值:
- 方案1:把
count存在数据库、Redis这类外部存储中,前后端都从这里读写数据 - 方案2:后端API在修改
count后,将更新后的值通过响应返回给前端,前端拿到后手动更新自己的状态(比如在fetch的回调里调用前端的setCount)
内容的提问来源于stack exchange,提问作者shawn
相关产品推荐
相关产品推荐

