我正在尝试为精简的定制商店决定统一的模式/界面。我发现不仅导出商店的基本状态很有用,而且还公开某种吸气剂。我似乎找不到一种方法来使用 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)
嵌套/命名空间时如何使用美元语法访问存储?
目前,Svelte 不支持嵌套商店的自动订阅。您必须取消嵌套然后订阅它。除了您展示的各种有效方法之外,您还可以执行以下操作:
<script>
import NameSpaced from './User.store.js'
const loggedIn = NameSpaced.loggedIn;
</script>
LoggedIn: {$loggedIn}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |