MST

星途 面试题库

面试题:Svelte derived store在复杂业务逻辑与跨组件通信中的深度应用

考虑一个大型Svelte应用,其中存在多个组件之间复杂的业务逻辑交互。需要通过derived store来协调这些交互,例如,组件A的状态变化会影响组件B和组件C的某些显示逻辑,同时组件D的操作又依赖于组件B和组件C通过derived store计算出的状态。请设计一个完整的架构方案,详细说明如何创建和使用derived store来实现这种复杂的跨组件业务逻辑交互,并给出核心代码片段以及对数据流向和更新机制的详细解释。
20.9万 热度难度
前端开发Svelte

知识考点

AI 面试

面试题答案

一键面试

1. 创建 Store

首先,我们需要创建基础的 stores 来表示各个组件的状态。假设组件 A 有一个状态 aState,组件 B 和 C 依赖于 aState 并产生自己的状态,组件 D 依赖于组件 B 和 C 组合后的状态。

<script>
    import { writable, derived } from'svelte/store';

    // 组件 A 的 writable store
    const aState = writable(0);

    // 组件 B 基于 aState 的 derived store
    const bState = derived(aState, $aState => {
        // 这里根据 aState 计算 bState
        return $aState * 2;
    });

    // 组件 C 基于 aState 的 derived store
    const cState = derived(aState, $aState => {
        // 这里根据 aState 计算 cState
        return $aState + 10;
    });

    // 组件 D 基于 bState 和 cState 的 derived store
    const dState = derived([bState, cState], ([$bState, $cState]) => {
        // 这里根据 bState 和 cState 计算 dState
        return $bState + $cState;
    });
</script>

2. 使用 Store

在 Svelte 组件中,我们可以使用这些 stores 来影响组件的显示逻辑。

组件 A

<script>
    import { aState } from './stores.js';
    let value = 0;
    const updateAState = () => {
        aState.set(value);
    };
</script>

<input type="number" bind:value>
<button on:click={updateAState}>Update A State</button>

组件 B

<script>
    import { bState } from './stores.js';
</script>

<p>B State: {$bState}</p>

组件 C

<script>
    import { cState } from './stores.js';
</script>

<p>C State: {$cState}</p>

组件 D

<script>
    import { dState } from './stores.js';
</script>

<p>D State: {$dState}</p>

3. 数据流向和更新机制解释

  • 数据流向
    • 组件 A 的 aState 是数据的源头,它是一个 writable store,可以被手动更新。
    • bStatecState 是基于 aStatederived store,它们依赖于 aState 的值,当 aState 更新时,bStatecState 会自动重新计算。
    • dState 是基于 bStatecStatederived store,当 bStatecState 任何一个更新时,dState 会重新计算。
  • 更新机制
    • 当组件 A 更新 aState 时,由于 bStatecState 依赖于 aState,它们会触发重新计算其值的过程。
    • bStatecState 更新后,因为 dState 依赖于它们,dState 也会重新计算。
    • 这种机制确保了各个组件状态之间的一致性和自动更新,避免了手动管理复杂的状态同步逻辑。