Обработка редюсеров в Redux

156
07 июля 2018, 02:30

У меня есть массив объектов, мне нужно менять active на true в каждом объекте по индексу.

Есть массив:

transplantation: [
    {
      stops: 'all',
      label: 'Все',
      active: false
    },
    {
      stops: 0,
      label: 'Без пересадок',
      active: true
    },
    {
      stops: 1,
      label: '1 пересадка',
      active: false
    },
    {
      stops: 2,
      label: '2 пересадки',
      active: false
    },
    {
      stops: 3,
      label: '3 пересадки',
      active: false
    }
  ]

Есть попытка:

case ON_SHOW:
    return {
        ...state, 
        transplantation: [...state.transplantation, state.transplantation[action.index].active = true]
    }

Хоть значение изменить и получается, однако создается лишний div. Как правильно обработать массив?

Answer 1

Вы неверно понимаете
[...state.transplantation, state.transplantation[action.index].active = true]

Это означает создать новый массив с элементами массива state.transplantation и элементом state.transplantation[action.index].active = true, поэтому у вас добавляется каждый раз новый элемент ( так как вы в массив новый элемент добавляете )

Можете сделать вот так:

case ON_SHOW:
return {
    ...state, 
    transplantation: state.transplantation.map((el, i) => {
        if (i === action.index) {
            el = {...el, active: true}
        }
        return el
    })
}
READ ALSO
Mysql возвращает значения по разному

Mysql возвращает значения по разному

День добрый уважаемые форумчанеСтолкнулся с такой проблемой

163
Реализация методов в LinkedList

Реализация методов в LinkedList

Всем добрый вечерПрошу помощи в таком вопросе: у меня есть LinkedList с реализованными в нем методами, не получается реализовать 3 метода: public boolean...

225
Как вывести строчку по частям

Как вывести строчку по частям

Есть строка в текстовом файле:

203