面试题答案
一键面试可能出现的问题
- 数据访问受限:插槽内容在子组件作用域内,无法直接访问父组件数据,导致业务逻辑难以实现。
- 作用域混淆:如果不小心将父组件数据直接暴露给插槽,可能导致组件间数据耦合度增加,难以维护和复用。
解决思路
- 使用具名插槽和作用域插槽:通过作用域插槽将父组件数据传递给插槽,同时保持插槽在子组件作用域内。
- 使用上下文提供/注入机制:例如Svelte的
setContext
和getContext
,在父组件设置上下文数据,子组件插槽通过注入获取数据。
代码示例(使用作用域插槽)
父组件 Parent.svelte
:
<script>
let parentData = 'Hello from parent';
</script>
<Child>
{#if true}
<div slot="content" let:data={parentData}>
{data}
</div>
{/if}
</Child>
子组件 Child.svelte
:
<script>
</script>
<slot name="content"></slot>
在上述代码中,父组件通过作用域插槽将 parentData
传递给子组件 Child
的 content
插槽,插槽内容可以在自身作用域内访问到该数据。