Mam listę zadań i chcę ustawić stan tego elementu w tablicy, aby "zakończyć", jeśli użytkownik kliknie "ukończ".Zaktualizuj pojedynczą wartość w tablicy pozycji | reagx redux
Oto moje działanie:
export function completeTodo(id) {
return {
type: "COMPLETE_TASK",
completed: true,
id
}
}
Oto mój reduktor:
case "COMPLETE_TASK": {
return {...state,
todos: [{
completed: action.completed
}]
}
}
Problem mam jest nowe państwo nie prowadzi już tekst związany z tego elementu na todo wybrana pozycja i identyfikator już tam nie są. Czy to dlatego, że nadpisuję stan i ignoruję poprzednie właściwości? Moje ładowanie obiektów obiektów wygląda następująco:
Objecttodos: Array[1]
0: Object
completed: false
id: 0
text: "Initial todo"
__proto__: Object
length: 1
__proto__: Array[0]
__proto__: Object
Jak widać, wszystko, co chcę zrobić, to ustawić ukończoną wartość na wartość true.
dzięki za pomoc TomW i dziękuję za odniesienia do bibliotek w zakresie aktualizacji stanu głębokiego. Świetna pomoc! – Filth
Widzę, że używasz pojedynczej linii, jeśli stwierdzenie jest trudne do odczytania. Wiem, że reduktory bombowe, gdy są instrukcje if. Czy jesteś w stanie wyjaśnić, co tu się dzieje i być może inny sposób napisania tej logiki? – Filth
Redukuje "bombę", gdy nie zwrócisz stanu z każdej gałęzi - instrukcje "jeśli" są w porządku, wystarczy, że upewnisz się, że "zwrócisz stan"; po znaku 'if'. Jeśli spojrzysz na obsługę TOGGLE_TODO tutaj: http://redux.js.org/docs/basics/Reducers.html#handling-more-actions zobaczysz bardzo podobny przykład do mojego, który używa 'if ' instrukcja zamiast '?:' - '?:' ma niewielką przewagę nad instrukcją if, ponieważ zmusza cię do zwracania wartości z każdej gałęzi. – TomW