以不可变的方式更新嵌套在对象中的数组

时间:2017-09-27 03:38:25

标签: reactjs immutable.js

所以我有这个我想要更新的减速器

import { fromJS } from 'immutable';
const initialState = fromJS({
  searchParams: {
    limit: 100,
    page: 1,
    order_by: 'name',
    filters: {
      and_keywords : []
    }
  },
})

当触发动作时,我想将一个对象推送到and_keywords数组中。到目前为止我所做的是这个

case ADD_KEYWORDS:
return state
    .setIn(['searchParams', 'filters', 'and_keywords'], '123');

我也试过

case ADD_KEYWORDS:
return state
    .updateIn(['searchParams', 'filters', 'and_keywords'], arr => arr.push('123'))

基于https://facebook.github.io中的文件,但我似乎无法使其发挥作用。执行此命令后未进行任何更改

1 个答案:

答案 0 :(得分:1)

您的NULL版本应该有效:

updateIn

您的const Immutable = require('immutable') const initialState = Immutable.fromJS({ searchParams: { limit: 100, page: 1, order_by: 'name', filters: { and_keywords : [] } }, }) const newState = initialState.updateIn(['searchParams', 'filters', 'and_keywords'], arr => arr.push('123')) console.log(newState) 版本代码也可以进行一些小修改:

setIn

两者都应输出:

const Immutable = require('immutable')


const initialState = Immutable.fromJS({
  searchParams: {
    limit: 100,
    page: 1,
    order_by: 'name',
    filters: {
      and_keywords : []
    }
  },
})

const newState = initialState.setIn(['searchParams', 'filters', 'and_keywords'], initialState.getIn(['searchParams', 'filters', 'and_keywords']).push('123'))

console.log(newState)