如何更新减速器中的嵌套不可变?

How can I update nested immutable in reducer?

我对 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)

您可以使用 Immutable 的 setIn 函数:

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

我找到了解决方案...

当我设置 filmList

我忘了使用 fromJS

// old
[setFilmList]: (state, payload) => {
  return state.set('filmList', payload)
}
// new, it works!
[setFilmList]: (state, payload) => {
  return state.set('filmList', fromJS(payload))
}