@Masterstvo

Как можно иммутабельно вернуть новый объект (state) в Redux?

Добрый день!
Разбираюсь с Redux. Подскажите, пожалуйста, как можно иммутабельно вернуть объект в данном и похожих случаях! Смысл в том, что при проектировании приложения возникает объект состояния с неким уровнем вложенности. Пока мне не понятно, как можно изменить булевы свойства внутри вложенных объектов! Когда делаю, как в коде ниже (экшн 'TOGGLE_COMPLETED' ) в React вываливается ошибка из-за того, что map() не успевает вернуть новый измененный массив.

//reducer.js

const initState = {
    todo: []
}

export default function reducer (state = initState, action) {
    switch(action.type){
        case 'ADD_TODO':
            return Object.assign({}, state, {
                todo: [
                    ...state.todo,
                    {
                        id: action.id,
                        text: action.text,
                        completed: false
                    }
                ]
            })
        case 'TOGGLE_COMPLETED':
            return Object.assign({}, state, {
                todo: state.todo.map((item) => {
                    if(item.id == action.id) {
                        item.completed = !item.completed
                    }
                })
            })
        default:
            return state
    }
}


Буду признателен за помощь!!!
  • Вопрос задан
  • 550 просмотров
Решения вопроса 1
@davidnum95
Забыли дописать:
case 'TOGGLE_COMPLETED':
            return Object.assign({}, state, {
                todo: state.todo.map((item) => {
                    if(item.id == action.id) {
                        item.completed = !item.completed
                    }
                    return item;
                })
            })
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 мая 2024, в 16:06
100000 руб./за проект
06 мая 2024, в 15:53
2500 руб./за проект
06 мая 2024, в 15:52
30000 руб./за проект