小编ano*_*one的帖子

Svelte / Sapper.js-如何使用localStorage数据初始化存储?

我来自React的背景,但是我要切换到Svelte和Sapper来开发我的下一个应用程序,以应对这些天React随附的庞大捆绑包规模。但是,我无法使用从localStorage检索的数据初始化Svelte的存储。

根据Sapper文档(https://sapper.svelte.dev/docs#Getting_started),我是通过npx degit "sveltejs/sapper-template#rollup" my-app从命令行运行来创建项目的。然后,我安装了依赖项,并删除了src文件夹中的演示代码。

然后,我创建了两个文件:src/routes/index.svelte和src/store/index.js。

两者的代码:

src / store / index.js

import {writable} from "svelte/store";

export let userLang;

if(typeof window !== "undefined") {
    userLang = writable(localStorage.getItem("lang") || "en");
} else {
    userLang = writable(null);
}
Run Code Online (Sandbox Code Playgroud)

src / routes / index.svelte

<script>
    import {userLang} from "../store";
</script>

<p>Your Preferred Language: {$userLang}</p>
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序并点击index路由时,我看到以下内容:

您的首选语言:null

然后几乎立即更新并更改为

您的首选语言:zh

当langlocalStorage中没有项目时,更改为

您的首选语言:fr

在localStorage.setItem("lang", "fr")开发者控制台中明确设置并刷新之后。

我知道,这家店是在服务器上初始化第一地方window是undefined,然后在客户端上复水。因此,此行为是预期的。 …

javascript state server-side-rendering svelte sapper

5
推荐指数
1
解决办法
1255
查看次数