проблема в обновлении todo в приложении svelte todo.используя "магазин" - PullRequest
0 голосов
/ 21 сентября 2019

Я сделал базовое приложение Todo в магазине svelte.В целом, это работает, но когда я хочу обновить Todo - это работает впервые, не работайте после этого.

Если я обновлю другую Todo, первая может быть обновлена ​​снова.Я пытаюсь найти, как это исправить, и я не знаю.(Я вижу, что есть проблема с моей updatedId переменной)

вот мой код: в codesandbox

1 Ответ

0 голосов
/ 21 сентября 2019

ОК, я понял.проблема заключалась в том, что я добавил в пользовательский магазин другие пары «ключ-значение», которые не связаны с обычным магазином.их значение не обновляется реактивно !!!Если в некоторых значениях пользовательского хранилища нет методов хранилища (установить, обновить, подписаться), их там быть не должно!это была ошибка, строки с комментариями:

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.что хранилища похожи на «глобальные переменные» ссылка на это решение

  2. более «изящный» способ: сделать внутри всего объекта todo еще один ключ «редактирования» с помощьюзначение false и поместите функцию в хранилище, которая его изменит. ссылка на это лучшее решение

...