在最近的浏览器(Chrome 78 / Safari 13 / Firefox 70)中,设置在上下文中的商店似乎可以按预期工作,如下所示:
// stores.js
import { writable } from 'svelte/store';
import { setContext, getContext } from 'svelte';
function createStore(key) {
const store = writable();
setContext(key, store);
return store;
}
export function getStore(key) {
const store = getContext(key);
if (!store) {
return createStore(key);
}
return store;
}
并在组件中使用,例如:
// Form.svelte
import { getStore } from '../stores/stores.js';
import Header from './Header.svelte'
export let incomingPages;
const currentPage = getStore('currentPage')
const numberOfPages = getStore('numberOfPages')
$currentPage = 0
$numberOfPages = Object.keys(incomingPages).length
<div class="page-wrapper" >
<Header />
<div class="page">
<svelte:component this={pages[$currentPage].page}
descriptiveCopy={pages[$currentPage].descriptiveCopy}
question={pages[$currentPage].question} />
</div>
</div>
然后页眉组件作为form的子级...
// Header.svelte
import { getStore } from '../stores/stores.js'
const totalPages = getStore('numberOfPages')
const currentPage = getStore('currentPage')
<div class="u-progress">
<span>{$currentPage + 1} of {$totalPages - 1}</span>
</div>
但似乎不能在ie11中工作(我知道在svelte中不一定支持ie11 )。我正在试着调试它,但我不明白上下文是如何工作的。由于getStore函数没有找到与键匹配的存储,因此它创建了一个新的不相关的存储。这个问题可以用babel ES6 -> ES5解决吗?我做了一个初步的测试,包括巴别塔,但没有用...谢谢!
发布于 2019-12-04 05:14:53
context API使用IE11中不存在的Map
对象。你需要带一个polyfill。
https://stackoverflow.com/questions/59158692
复制相似问题