Javascript 嵌套Redux存储属性的Redux还原程序

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'

我想这样塑造我的redux商店,并添加更多searchForm的同级:

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}