如何使用美元符号语法访问嵌套存储

Sel*_*sam 5 svelte

我正在尝试为精简的定制商店决定统一的模式/界面。我发现不仅导出商店的基本状态很有用,而且还公开某种吸气剂。我似乎找不到一种方法来使用 sveltes $-syntax 在导入时未解构时访问嵌套存储:

User.store.js(简化)

import { readable, writable } from 'svelte/store';

const store = writable({
    token: null,
});

const loggedIn = readable(false, (set) => store.subscribe(s => set(!!s.token)));

const login = async (token) => store.set({token});
const logout = async () => store.set({token: null};

const state = {subscribe: store.subscribe}

export {state, loggedIn, login, logout}
export default {state, loggedIn, login, logout}

Run Code Online (Sandbox Code Playgroud)

索引.svelte

<script>
import {loggedIn} from './User.store.js'
import NameSpaced from './User.store.js'
import {loggedIn as NameSpacedLoggedIn} from './User.store.js'

</script>

LoggedIn 1: {$loggedIn} // WORKS, BUT NOT NAMESPACED (false)
LoggedIn 2: {NameSpaced.$loggedIn} // DOES NOT WORK (undefined)
LoggedIn 3: {$NameSpaced.loggedIn} // DOES NOT WORK (undefined)
LoggedIn 4: {$NameSpacedLoggedIn} // WORKS, BUT CUMBERSOME (false)

Run Code Online (Sandbox Code Playgroud)

问题

嵌套/命名空间时如何使用美元语法访问存储?

dum*_*umm 6

目前,Svelte 不支持嵌套商店的自动订阅。您必须取消嵌套然后订阅它。除了您展示的各种有效方法之外,您还可以执行以下操作:

<script>
import NameSpaced from './User.store.js'

const loggedIn = NameSpaced.loggedIn;
</script>
LoggedIn: {$loggedIn}
Run Code Online (Sandbox Code Playgroud)