面试题答案
一键面试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,可以被手动更新。 bState
和cState
是基于aState
的derived
store,它们依赖于aState
的值,当aState
更新时,bState
和cState
会自动重新计算。dState
是基于bState
和cState
的derived
store,当bState
或cState
任何一个更新时,dState
会重新计算。
- 组件 A 的
- 更新机制:
- 当组件 A 更新
aState
时,由于bState
和cState
依赖于aState
,它们会触发重新计算其值的过程。 - 当
bState
或cState
更新后,因为dState
依赖于它们,dState
也会重新计算。 - 这种机制确保了各个组件状态之间的一致性和自动更新,避免了手动管理复杂的状态同步逻辑。
- 当组件 A 更新