面试题答案
一键面试实现思路
- 事件委托原理:在Svelte中,事件委托是将子元素的事件绑定到父元素上。因为事件会冒泡,所以当子元素触发事件时,父元素可以捕获到。
- 动态添加列表项:通过一个按钮来触发添加新列表项的操作。在添加新列表项时,不需要为每个新项单独绑定点击事件,因为已经在父元素上设置了事件委托。
- 保持事件委托的有效性:确保在添加新列表项后,父元素的事件委托依然能捕获到新项的点击事件。这通常只需要确保新项被正确添加到设置了事件委托的父元素内即可。
核心代码
<script>
let items = ['item1', 'item2'];
function addItem() {
items = [...items, 'new item'];
}
function handleClick(event) {
console.log(`Clicked on: ${event.target.textContent}`);
}
</script>
<button on:click={addItem}>Add Item</button>
<ul on:click={handleClick}>
{#each items as item}
<li>{item}</li>
{/each}
</ul>
在上述代码中:
items
数组初始包含一些列表项。addItem
函数用于动态添加新列表项,通过展开运算符创建新数组并添加新项。handleClick
函数是事件委托处理函数,它通过event.target.textContent
获取点击的列表项文本并打印。<ul>
元素设置了on:click
事件委托,当<li>
元素(无论是初始还是动态添加的)被点击时,handleClick
函数都会被调用。