在苗条的待办事项应用程序中更新待办事项时出现问题。使用“商店”

时间:2019-09-21 15:39:11

标签: svelte

我用一个苗条的商店做了一个基本的Todo应用。 总的来说,它可以工作,但是当我想更新Todo时-第一次可以工作,之后不要再工作。

如果我更新另一个Todo,则第一个可以再次更新。 我试图找到解决方法,但我不知道。 (我发现我的updatedId变量存在问题)

这是我的代码: 在codesandbox

1 个答案:

答案 0 :(得分:0)

好我知道了。 问题是我在自定义存储中添加了其他未与常规存储连接的“键值”对。 它们的值不会被动地更新!!! 如果自定义存储中的某些值中没有存储方法(set,update,subscribe),则它们不应该存在! 那是错误,带有注释的行:

import { writable } from 'svelte/store';
import uuid from 'uuid/v4'    

const todos_ = writable([]);


const customTodos={
    subscribe: todos_.subscribe,
    addTodo: (text)=>todos_.update(todos=>[...todos,{text,id:uuid()}]),
    deleteTodo: (id)=>todos_.update(todos=>todos.filter(todo=>todo.id!==id)),
    // updating:false,
    editTodo:(id,editedText)=>todos_.update(todos=>
        todos.map(todo=>todo.id===id ? {...todo,text:editedText}:todo)
    ),
    // updatedId:""
}

export default customTodos

我应该做的是两种选择之一:

  1. 创建另外两个单独的存储,并将该变量放入其中。 因此,在每次更改时,Dom也会更新。就像“全局变量” link to that solution

  2. 更多“优雅”的方式:在所有todo对象内部执行另一个值为false的“ editing”键,并将一个函数更改为存储。 link to that better solution