Mac*_*zyk 8 javascript svelte svelte-3
我正在迭代一个数据数组,我想在渲染它之前对其进行一些处理。
我知道我可以创建一个新组件并将数组条目传递给 i,并在该子组件中进行处理,或者我可以添加一个辅助函数getClass(entry),或者我可以内联一个十元运算符,
但我想知道是否有一种方法可以做这样的事情,将一些代码内联到每个块中。非功能性示例:
<div class="Menu">
{#each menuEntries as entry, i }
{{
let classes = entry.classes;
if (entry.submenu) {
classes += ' has-submenu';
}
}}
<div class="menu-entry {classes}">...</div>
{/each}
</div>
Run Code Online (Sandbox Code Playgroud)
这似乎是一个像这样的解决方法。唯一的事情是classes必须在循环之前定义。
<script>
let classes = '';
</script>
<div class="Menu">
{#each menuEntries as entry, i }
{(() => {
classes = entry.classes;
if (entry.submenu) {
classes += ' has-submenu';
}
return ''; // return empty string so Svelte does not print it
})()}
<div class="menu-entry {classes}">...</div>
{/each}
</div>
Run Code Online (Sandbox Code Playgroud)
Rom*_*kyi 12
对于那些需要在#each块内进行一些计算的人可以使用@const语句。
<script>
const items = ['a', 'b', 'c'];
</script>
{#each items as item}
{@const exclamationMark = item + '!'}
<p>{exclamationMark}</p>
{/each}
Run Code Online (Sandbox Code Playgroud)
您可以使用 Array.map 函数进行一些额外的处理。
这样,您可以使用映射“this”添加可选参数,并使用从映射函数返回的 [....] 来使用其他循环变量。
例子:
{#each menuEntries.map(extraProcessing, thisArg) as [entry, arg2, arg3] , i }
... loop using entry, arg2, arg3, i
{/each}
Run Code Online (Sandbox Code Playgroud)
extraProcessing 函数示例:
function extraProcessing(entry, idx) {
... do something using: entry, idx and this (thisArg)
return [entry, arg2, arg3]
Run Code Online (Sandbox Code Playgroud)
这里有一个包含您示例的REPL 。
| 归档时间: |
|
| 查看次数: |
4256 次 |
| 最近记录: |