实现思路
- 定义上下文模块:使用
context="module"
创建一个模块级别的上下文。在这个模块中,定义共享的数据和方法。这样可以在整个应用的相关模块中方便地访问这些内容,避免通过层层传递props来共享数据。
- 数据初始化:在上下文模块中初始化需要共享的数据。这些数据可以是全局状态、配置信息等。
- 提供访问接口:为其他组件提供获取和修改共享数据的方法。这样可以控制对共享数据的访问,保证数据的一致性和可维护性。
- 组件接入:在需要使用共享数据的组件中,引入上下文模块,通过模块提供的接口来获取和使用数据。
关键代码示例
- 创建上下文模块(例如
context.js
)
// context.js
let sharedData = {
user: null,
settings: {}
};
export function getSharedData() {
return sharedData;
}
export function setSharedData(newData) {
sharedData = {...sharedData, ...newData };
}
- 使用上下文模块的组件(例如
App.svelte
)
<script context="module">
import { getSharedData, setSharedData } from './context.js';
const initData = {
user: { name: 'John' },
settings: { theme: 'light' }
};
setSharedData(initData);
</script>
<script>
import { getSharedData } from './context.js';
const data = getSharedData();
</script>
<div>
<p>User: {data.user.name}</p>
<p>Theme: {data.settings.theme}</p>
</div>
- 子组件(例如
Child.svelte
)
<script>
import { getSharedData, setSharedData } from './context.js';
const data = getSharedData();
function updateTheme() {
setSharedData({ settings: {...data.settings, theme: 'dark' } });
}
</script>
<button on:click={updateTheme}>Switch to Dark Theme</button>