javascript - 在 Svelte 组件中未调用时触发的函数
问题描述
我正在通过构建一个简单的待办事项应用程序来尝试 Svelte。这是整个组件:
<script>
let newTask = '';
let showCompleted = true;
let tasks = [{
name: 'Test task',
completed: false
},
{
name: 'Test task 2',
completed: true
}];
$: filterTasks = tasks.filter(task => showCompleted === true ? true : task.completed === false);
function addTask() {
tasks = [...tasks, {
name: newTask,
completed: false
}];
newTask = '';
};
function updateTask(updatedTask) {
tasks = tasks.map(task => {
if(task === updatedTask) {
return {...updatedTask, completed: !task.completed};
} else {
return task;
}
});
};
</script>
<h1>To-do</h1>
<label><input type="checkbox" bind:checked={showCompleted}> Show completed</label>
<ul>
{#each filterTasks as task}
<li>
<input type="checkbox" checked={task.completed} on:change={updateTask(task)}>
{task.name}
</li>
{/each}
</ul>
<input type="text" bind:value="{newTask}">
<button on:click|preventDefault={addTask}>Add</button>
但我遇到了多个问题:
updateTask
在页面加载时为每个任务触发,并且在单击复选框时不再起作用- 完整任务的过滤不起作用
- 当我添加一个任务时,它直接完成最后一个
我有一种感觉,我可能在某些时候错过了一些东西,它导致了所有这些问题,但是无法找到什么。
解决方案
所以你错过的是你需要将回调函数传递给on:change
事件处理程序,即on:change={() => updateTask(task)}
. 现在它只是updateTask
立即调用。这是更新的 REPL,我无法重现您提到的其他问题
推荐阅读
- reactjs - 将 Formik 与 React.FC 一起使用
- c++ - 对 ofstream 的访问冲突
- java - OpenSubtitles API 响应
- bash - 如果满足条件,如何更新bash脚本中的一行
- reactjs - 我怎样才能做一个
每个参数的路径触发器“componentDidMount()”? - python - 我正在制作一个绘制线条的不和谐机器人,每次我多次使用 plot 命令时,它都会在上一个图表上绘制
- java - 查看作为 rt.jar 一部分的 sun.misc 的源代码
- sql - SQL - MS Access Form 设计 - 添加 ISA 关系数据
- javascript - 无法从父范围访问节点 js 要求
- xcode - 为什么我的 CocoaPods 注入的 Xcode 构建永远不会完成,引用“取消”而不是“失败”或“成功”?