实现思路
- 顶层组件传递数据:顶层组件通过
props
将数据传递给中间层组件。
- 中间层组件使用Context API:中间层组件借助Svelte的
setContext
将部分数据提供给深层组件。
- 深层组件事件派发:深层组件使用
createEventDispatcher
创建事件派发器,将处理后的数据通过事件传递出去,中间层组件捕获并传递给顶层组件。
关键代码片段
- 顶层组件(App.svelte)
<script>
import MiddleComponent from './MiddleComponent.svelte';
let dataFromDeep = '';
const handleDataFromDeep = (e) => {
dataFromDeep = e.detail;
};
</script>
<MiddleComponent {dataToPass} on:dataFromDeep={handleDataFromDeep}/>
- 中间层组件(MiddleComponent.svelte)
<script>
import { setContext } from'svelte';
import DeepComponent from './DeepComponent.svelte';
export let dataToPass;
setContext('contextData', dataToPass);
const handleDataFromDeep = (e) => {
this.dispatchEvent(new CustomEvent('dataFromDeep', { detail: e.detail }));
};
</script>
<DeepComponent on:dataFromDeep={handleDataFromDeep}/>
- 深层组件(DeepComponent.svelte)
<script>
import { getContext } from'svelte';
const contextData = getContext('contextData');
const dispatch = createEventDispatcher();
const handleClick = () => {
// 处理数据
const processedData = contextData +'processed';
dispatch('dataFromDeep', processedData);
};
</script>
<button on:click={handleClick}>Dispatch Data</button>