Javascript 嵌套Redux存储属性的Redux还原程序
我想这样塑造我的redux商店,并添加更多searchForm的同级:Javascript 嵌套Redux存储属性的Redux还原程序,javascript,reactjs,react-native,redux,react-redux,Javascript,Reactjs,React Native,Redux,React Redux,我想这样塑造我的redux商店,并添加更多searchForm的同级: import { Map } from 'immutable' const searchForm = Map( { 'categories': ['meat'], 'mealTypes': [], 'location': { place: {}, distanceFromPlaceValue: 10, distanceFromPlaceUnit: 'k'
import { Map } from 'immutable'
const searchForm = Map(
{
'categories': ['meat'],
'mealTypes': [],
'location': {
place: {},
distanceFromPlaceValue: 10,
distanceFromPlaceUnit: 'k'
},
'keywords': ''
}
)
const initialState = Map(
{
searchForm: searchForm
}
)
export default initialState
到目前为止,我已经为searchForm的类别
和关键字
制作了简化程序,并正在创建如下存储:
const reducer = combineReducers({ keywords, categories })
const store = createStore(
reducer,
initialState,
devToolsEnhancer()
)
const searchForm = {
'categories': List(..),
'mealTypes': List(...),
'location': Map(...),
'keywords': ''
}
const initialState = {
searchForm: searchForm
};
这就产生了一个错误:
服务器在以前的状态中找到意外属性“searchForm”
减速器
CreateStore
需要使用与redux存储的顶级属性相匹配的缩减器。有没有办法把我做过的东西嵌套起来,并在减速机上无误地通过?或者我是否需要更改redux存储的形状,并使任何还原器成为顶级存储属性?根据redux初始状态文档:
如果您使用组合减速器生产减速器,则这必须是普通减速器
与传递给它的关键帧具有相同形状的对象。否则,你
你可以自由传递任何你能理解的东西
您将combineReducer与关键字
和类别
键一起使用,因此您的初始状态也必须包括这些键,但在您的情况下,它只包括搜索表单
键
您不需要更改状态的形状,只需使用嵌套的组合查询即可:
const reducer = combineReducers({searchForm: combineReducers({ keywords, categories })});
请注意,如果您使用Redux组合减速机
,则此减速机管理的状态对象必须是普通对象(而不是不可变对象)。
所以我建议如下:
const reducer = combineReducers({ keywords, categories })
const store = createStore(
reducer,
initialState,
devToolsEnhancer()
)
const searchForm = {
'categories': List(..),
'mealTypes': List(...),
'location': Map(...),
'keywords': ''
}
const initialState = {
searchForm: searchForm
};
如果您想使用Immutable对象作为初始状态,可以使用它提供的combineReducers
方法使用Immutable.js API迭代状态。请查看此以了解更多详细信息
此外,无论您使用的是Redux还是Redux,Imuable state对象(普通或不可变)属性都必须与传递给组合转换器的对象键相对应
,感谢这项工作。我刚刚意识到我已经在使用“redux immutable”中的import{combineReducers}