我想在distanceFromPlaceValue
减速器内添加location
减速器-因为我具有这种形式的redux存储:
import { Map } from 'immutable'
import { Dimensions } from 'react-native'
const searchForm = Map(
{
'categories': [],
// 'mealTypes': [],
'location': {
'locationInput': '',
'place': {},
'position': {},
'distanceFromPlaceValue': 10,
'distanceFromPlaceUnit': 'kilometer',
'autocompleteResults': {}
},
'keywords': ''
}
)
var { width, height } = Dimensions.get('window')
const ASPECT_RATIO = width / height
const LATITUDE = 19.0760
const LONGITUDE = 72.8777
const LATITUDE_DELTA = 0.01
const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO
const region = Map(
{
region: {
latitude: LATITUDE,
longitude: LONGITUDE,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
}
}
)
const map = Map(
region: region
)
const searchPage = Map(
{
'isMenuOpen': true
}
)
const initialState = Map(
{
searchForm: searchForm,
searchPage: searchPage,
map: map
}
)
export default initialState
而且我没有将
distanceFromPlaceValue
大小写添加到location
减速器中,也不想这样做-减速器太大了。这是我的尝试:
const rootReducer = combineReducers(
{
searchForm: combineReducers(
{
keywords,
categories,
location: combineReducers({ location, distanceFromPlaceValue })
}),
searchPage,
map
}
)
收到此错误:
减速器接收到的先前状态是意外类型。
预期参数为Immutable.Collection的实例,或
具有以下属性的Immutable.Record:“位置”,
“ distanceFromPlaceValue”。
我在CombineReducers中做错了。我究竟做错了什么?
最佳答案
combineReducers
会将location
和distanceFromPlaceValue
嵌套到比我认为的要深的级别,因此最终将得到如下结构:
{
'keywords': ''
'categories': [],
'location': {
'location': {
'locationInput': '',
'place': {},
'position': {},
'autocompleteResults': {}
}
'distanceFromPlaceValue': {
'distanceFromPlaceValue': 10,
'distanceFromPlaceUnit': 'kilometer'
}
}
}
而不是像
searchForm
const中那样合并在一起。阅读有关beyond
combineReducers
的Redux文档,然后考虑一下您希望状态结构看起来如何。如果仍要合并两个化简器,而不是将它们合并为嵌套结构,则可以使用plenty of other libraries以不同的方式合并化简器以获得不同的效果。
我以前曾使用redux-concatenate-reducers来执行此操作,但未使用ImmutableJS结构,因此它可能对您不可用
const rootReducer = combineReducers(
{
searchForm: combineReducers(
{
keywords,
categories,
location: concatenateReducers([location, distanceFromPlaceValue])
}),
searchPage,
map
}
)