javascript - 使用 JavaScript 创建的 Svelte 组件不接收响应式更新
问题描述
我使用以下 JS 在按钮单击时动态创建一个组件:
<script>
export let order;
function toggleModal(an_order){
modal_open.set(!$modal_open);
const modal = new OrderModal({
target: document.querySelector('.modal_container-' + order.id),
props: {
order: an_order
},
});
}
</script>
但是,每当我更新订单对象时,它都不会反应性地反映在创建的组件中。
如果我将组件直接放在 html 中,而不是像这样使其动态化:
<div class="modal_container-{order.id} fixed">
<OrderModal {order} />
</div>
<div class="max-w-xs w-full overflow-hidden rounded-lg shadow-md bg-white cursor-pointer" on:click="{() => toggleModal(order)}">
然后它正常工作并且元素被反应性更新。
有没有办法让 JavaScript 创建的组件响应式更新?
*** 更新以显示它是如何插入的 ***
执行更新的函数:
function deleteItem(){
order.order_items.splice(index, 1);
$order_list = $order_list;
}
正如你所看到的,我明确地做了一个分配来触发更新,当组件不是通过 javascript 创建时指定的工作。
解决方案
这不起作用的原因是编译器将在编译期间创建反应元素之间的所有链接。您的Modal
组件当时不存在,因此不可能这样做。这也解释了为什么直接添加 Modal 是有效的。
解决此问题的一种方法是使用商店并将此商店传递给模态。
一般来说,在 Svelte 中,您不会使用现有的代码。一种更Svelte的方法是使用 bool 来跟踪是否必须显示 Modal:
<script>
let showModal = false
function toggleModal() {
showModal = !showModal
}
</script>
{#if showModal}
<Modal />
{/if}
推荐阅读
- c# - 使用“HasConversion()”或任何其他方法将字符串转换为 Fluent API (EF Core) 中的 HierarchyId?
- python - Django:在多个模型中搜索
- c# - 如何将 mm/dd/yyy 转换为日期时间并保存在 c# 中的 sql 中?
- c# - 构建“.Net Standard”项目时——这是什么意思?
- python - 使用 Django 发表评论后如何重定向到同一页面
- python - Google Foobar Challenge 可爱的幸运羊
- android - 并且它的超类没有带有 Kotlin 和 DI 的 @Subscribe 注释的公共方法
- python - 我试图解决这个关于阶乘的问题,但它没有给出正确的答案
- java - Android Studio Preview 未显示 ListView 示例
- qt - 绑定类型:是否可以监听临时覆盖的绑定?