分层及职责
- 视图层
- 职责:负责展示待办事项列表、单个待办事项的样式以及用户交互界面,如添加新待办事项的输入框、完成状态的勾选框等。
- 实现方式:利用Svelte组件特性,将待办事项列表封装为一个组件,每个待办事项作为子组件。例如,
TodoList.svelte
组件负责整体列表布局,TodoItem.svelte
组件负责单个待办事项的展示和交互。通过Svelte的响应式,根据数据状态实时更新视图,比如当待办事项完成状态改变时,实时显示勾选效果。
- 逻辑层
- 职责:处理与待办事项相关的业务逻辑,如添加新待办事项、标记待办事项为完成或未完成、删除待办事项等。
- 实现方式:在Svelte组件内部使用JavaScript逻辑来实现这些功能。通过Svelte的响应式声明,当数据发生变化时,自动更新相关部分。例如,在
TodoList.svelte
组件中定义添加待办事项的函数,该函数修改存储待办事项的数组,Svelte会自动更新视图。也可以将部分复杂逻辑封装成独立的函数或模块,在组件中引入使用。
- 数据层
- 职责:负责存储和管理待办事项的数据,包括数据的持久化(如使用localStorage)。
- 实现方式:可以在Svelte的
script
标签内定义一个数组来存储待办事项数据。对于数据持久化,利用Svelte的生命周期函数(如onMount
),在组件挂载时从localStorage读取数据,在数据发生变化时(通过响应式感知),将数据写回localStorage。例如:
<script>
let todos = [];
onMount(() => {
const storedTodos = localStorage.getItem('todos');
if (storedTodos) {
todos = JSON.parse(storedTodos);
}
});
$: localStorage.setItem('todos', JSON.stringify(todos));
</script>
通过Svelte特性实现分层与职责分离
- 组件化:将不同层次的功能封装到不同的组件中,视图层的每个部分(如列表、单个项)是一个组件,逻辑层可以在组件内部实现,数据层也可以在组件中管理数据的存储与读取。不同组件之间通过props进行数据传递,实现低耦合,清晰地分离各层职责。
- 响应式:Svelte的响应式使得数据层的变化能够自动反映到视图层,无需手动操作DOM。逻辑层对数据的修改,如添加或删除待办事项,会触发响应式更新,自动更新视图,保证了各层之间的协同工作,且代码简洁高效。