以不可变的方式更新嵌套在对象中的数组
update an array nested in an object in an immutable way
所以我有这个减速器,我想更新
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 中的文档,但我似乎无法使其工作。执行此命令后未发生任何变化
您的 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)
两者都应该输出:
Map { "searchParams": Map { "limit": 100, "page": 1, "order_by": "name", "filters": Map { "and_keywords": List [ "123" ] } } }
所以我有这个减速器,我想更新
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 中的文档,但我似乎无法使其工作。执行此命令后未发生任何变化
您的 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)
两者都应该输出:
Map { "searchParams": Map { "limit": 100, "page": 1, "order_by": "name", "filters": Map { "and_keywords": List [ "123" ] } } }