Реагировать (редукция), как выдвинуть список в список, как оторванные предметы - PullRequest
0 голосов
/ 04 июня 2019

Я хочу перенести элементы списка в список предыдущего состояния. Я использовал неизменяемые «List» и list.push (), но он не работает с отдельными элементами.

Просто весь список помещается в предыдущее состояние списка. как это.

список [(1), (2), (3)] + список [(1), (2)]

==> Список [(1), (2), (3), Список [(1) (2)]]

Я хочу получить список [(1), (2), (3), (4), (5)]

Редуктор push-списка ниже

  ...pender({
    type: PATCH_IMG,
    onSuccess: (state, action) => {
      const images = List(state.getIn(['orderById', 'images']))
      return state.setIn(['orderById', 'images'], images.push(List(action.payload.data)))
    }

вернуть payload.data с fileList ниже (server-Nodejs)

router.patch('/img/:id', upload.array('images', 10), async(req, res) => {
  let fileList = [];
  for(let i = 0; i < req.files.length; i++) {
    fileList.push(`/img/${req.files[i].filename}`)
  }
  const order = await Order.findByIdAndUpdate(
    req.params.id,
    {
      $push: {"images": fileList}
    }
  )
  await res.send(fileList);
})

Это снимок экрана перед выполнением редуктора (ссылка ниже).

введите описание изображения здесь

Это скриншот после выполнения редуктора (ссылка ниже).

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Потому что вы помещаете массив в массив.

В вашем случае вы должны использовать concat для объединения массивов

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

Например: images.concat(List(action.payload.data))

0 голосов
/ 04 июня 2019

Похоже, вам нужно удалить вторую List - вам нужно вставить предметы в уже созданный List, а не вставлять в него новую List

...pender({
    type: PATCH_IMG,
    onSuccess: (state, action) => {
      const images = List(state.getIn(['orderById', 'images']))
      return state.setIn(['orderById', 'images'], images.push(action.payload.data))
    }
...