Я довольно новый для immutable.js. Я хочу обновить home.filmList[0].isDetailModalShow = false. Как мне это сделать? Пожалуйста, помогите мне! Мое состояние, как это:

{
  home: {
    filmList: [
      {
        id: 1,
        name: '111',
        imgUrl: '111',
        isDetailModalShow: false
      },
      {
        id: 2,
        name: '222',
        imgUrl: '',
        isDetailModalShow: false
      },
    ]
  }
}

И мой редуктор, как это

import { createReducer } from 'redux-act'
import { fromJS } from 'immutable'
import { setFilmList, toggleDetailModal } from './actions'

const initialState = fromJS({
  filmList: [],
})

export default createReducer({
  [toggleDetailModal]: (state, payload) => {
    const index = state.get('filmList').findIndex(item => item.id === payload)
    // state.get(filmList) is filmList: [........]
    // below line code do not work!
    return state.updateIn(['filmList', index, 'isDetailModalShow'], value => !value)
  },
}, initialState)
-1
catwen 28 Фев 2017 в 20:06

2 ответа

Лучший ответ

Я нахожу решение ...

Когда я установил filmList

Я забыл использовать от JS

// old
[setFilmList]: (state, payload) => {
  return state.set('filmList', payload)
}
// new, it works!
[setFilmList]: (state, payload) => {
  return state.set('filmList', fromJS(payload))
}
0
catwen 1 Мар 2017 в 03:32

Вы можете использовать функцию setIn Immutable:

state.setIn(['filmList', 0, 'isDetailModalShow'], false)

1
Thibaut Remy 28 Фев 2017 в 17:25