svelte - Svelte:App 构造函数的第二次实例化覆盖了第一次实例化,Props 进入 Stores 问题?
问题描述
你好 Sveltermeisters,
问题:我正在尝试在同一页面上初始化 App 的两个实例。App 在 main.js 文件中作为页面上的全局变量公开,如下所示:
//main.js
import App from './components/App.svelte'
window.App = App
然后在一个 html 页面中初始化两个应用实例
<!–– index.html ––>
<button id="cta-button>CTA</button>
<button id="cta-button-2>CTA</button>
<!–– app.js is built and deployed as remote resource ––>
<script type="text/javascript" src="https://path.to/app.js"></script>
<script>
const app = new App({
target: document.querySelector('body'),
props: {
targetButtonIdToShowFormModal: "cta-button",
iGetDroppedIntoAStore1: "some value",
iGetDroppedIntoAStore2: "some value",
iGetDroppedIntoAStore3: "some value"
}
})
const app2 = new App({
target: document.querySelector('body'),
props: {
targetButtonIdToShowFormModal: "cta-button-2",
iGetDroppedIntoAStore1: "some different value",
iGetDroppedIntoAStore2: "some different value",
iGetDroppedIntoAStore3: "some different value"
}
})
</script>
奇怪的是:第二个 app 的 props 会覆盖第一个 app 的 props,并且每个 app 的状态始终保持同步,无论打开哪个 app。
我的断言:由于道具被倾倒到商店中,第二个实例将覆盖第一个实例。由于每个应用程序都引用同一组商店,因此它们的数据始终保持同步。
这是真的?如果是这样,我该如何设计我的商店以使他们的数据保持独立?
解决方案
尝试为每个实例创建一个商店实例App
,您可以使用context
setContext
& getContext
。
将任意上下文对象与当前组件和指定键相关联。然后使用 getContext 组件的子级(包括插槽内容)可以使用上下文。
上下文本身并不是反应性的。如果您需要上下文中的反应式值,那么您可以将存储传递到上下文中,这将是反应式的。
(例)
推荐阅读
- javascript - 提交后重置 HTML 表单
- sql - 尝试在 firebird sql 中创建函数时出错
- matlab - 仅取霍夫变换的中心峰
- python - Tensorflow 导入错误 AttributeError:“模块”对象没有属性“导出器”
- r - 如何在没有双反斜杠的情况下读取目录名称作为用户输入?
- git - LibreSSL SSL_connect:SSL_ERROR_SYSCALL 连接到 bitbucket.org:443
- ios - 如何将背景颜色应用到 iPhone X 的不安全区域
- ios - 如何在 Swift 中编辑或更新文本字段中的文本?
- android - 折叠后调整我的 CollapsingToolbarLayout
- yocto - bitbake 在最简单的食谱上失败了