【问题标题】:a problem in updating todo in svelte todo app. using "store"在 svelte todo 应用程序中更新 todo 时出现问题。使用“商店”
【发布时间】:2019-09-21 15:39:11
【问题描述】:

我做了一个基本的 Todo 应用程序和一个精简的商店。 一般来说,它可以工作,但是当我想更新 Todo 时 - 它是第一次工作,之后就不再工作了。

如果我更新另一个 Todo,第一个可能会再次更新。 我试图找到如何解决它,我不知道。 (我发现我的updatedId 变量有问题)

这是我的代码: 在codesandbox

【问题讨论】:

    标签: svelte


    【解决方案1】:

    好的。我得到了它。 问题是我在自定义存储中添加了其他未连接到常规存储的“键值”对。 它们的值不会被动更新!!! 如果在自定义商店的某些值中没有商店方法(设置、更新、订阅),它们不应该在那里! 那是错误的,带有 cmets 的行:

    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 的“编辑”键,并在存储中放置一个函数来更改它。 link to that better solution

    【讨论】:

    • 我建议查看这个待办事项示例。使用 firestore、RxJs 和存储它变得很神奇。不熟悉这些东西,并且是 Svelte-3 的初学者,我被震撼了。只需几行代码。这是最佳形式的实时体验。 fireship.io/lessons/svelte-v3-overview-firebase
    • 感谢您的评论,我知道在没有商店的情况下这样做,这很容易。 !我的目的是练习商店并了解如何与他们合作。
    • 我向您展示的示例充满了商店的魔力。并与 RxJS 交互以获得更多魔力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多