svelte-3 - 过滤 Svelte Promise 的结果
问题描述
在使用Svelte制作我的第一个应用程序时,我喜欢它,除了在从名为search的文本输入中过滤承诺的结果时出现的以下内容。
在 promise 解决之前过滤产品失败,因为products是 type function。
在继续之前,我必须进行类型检查...
typeof products === "object" && ...
{#await promise then products}
<div class="flex justify-center flex-wrap">
{#each typeof products === "object" &&
products.filter((s) =>
s.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())
) as product
}
<Product
{product}
{handleSelectProduct}
selected={selectedProducts.includes(product)}
/>
{/each}
</div>
{/await}
有没有办法避免这种情况?
谢谢
解决方案
应该不需要 validate typeof products === "object"
。但将逻辑(如过滤器)排除在模板之外并保持模板“精简”是一种很好的做法。
见下面的例子(可以运行https://svelte.dev/repl/
)
<script>
let search = "c";
let promise = new Promise((resolve) => {
resolve([{ name: "abc" },{ name: "bcd" },{ name: "cde" },{ name: "def" }]);
});
$: filtered = promise.then((r) =>
r.filter((s) =>
s.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())
)
);
</script>
<input bind:value={search}>
{#await filtered then products}
<ul>
{#each products as product}
<li>{product.name}</li>
{/each}
</ul>
{/await}
{#await promise then products}
<ul>
{#each products.filter((s) =>
s.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())) as product
}
<li>{product.name}</li>
{/each}
</ul>
{/await}
两个块的结果相同,因此typeof
不需要检查(但第一个块对眼睛来说更容易一些)。
如果您遇到需要您验证产品类型的问题,您应该检查承诺的结果。
推荐阅读
- android - Xamarin.android,从对话框片段打开图像选择器意图
- c++ - cv::Mat GREY 转 RGBA 并转换为 UIImage
- reactjs - React Native EStyleSheet 如何应用多种样式
- arm - ARMv8:XZR 在 LDUR/STUR 指令中使用汇编错误
- python - Pandas DataFrame 的条件平均值
- python - python请求模块重定向过多的问题
- java - 适用于 Linux 的 Windows 子系统无法识别 JAVA_HOME 环境变量
- javascript - 如何查找用户输入是否与数组的值相同
- python - Python asyncio 任务不启动
- c - 使用 pthread 和同步