如何使用美元符号语法访问嵌套存储
How to access nested store with dollar sign syntax
我正在尝试为精巧的定制商店决定一个统一的 pattern/interface。我发现不仅可以导出商店的基本状态,还可以公开某种吸气剂,这很有用。我似乎无法找到一种方法来使用 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}
Index.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)
问题
如何在 nested/namespaced 时使用美元语法访问商店?
Svelte 目前不支持嵌套商店的自动订阅。你必须取消嵌套然后订阅它。除了您展示的各种工作方式之外,您还可以:
<script>
import NameSpaced from './User.store.js'
const loggedIn = NameSpaced.loggedIn;
</script>
LoggedIn: {$loggedIn}
我正在尝试为精巧的定制商店决定一个统一的 pattern/interface。我发现不仅可以导出商店的基本状态,还可以公开某种吸气剂,这很有用。我似乎无法找到一种方法来使用 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}
Index.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)
问题
如何在 nested/namespaced 时使用美元语法访问商店?
Svelte 目前不支持嵌套商店的自动订阅。你必须取消嵌套然后订阅它。除了您展示的各种工作方式之外,您还可以:
<script>
import NameSpaced from './User.store.js'
const loggedIn = NameSpaced.loggedIn;
</script>
LoggedIn: {$loggedIn}