distanceFromPlaceValue

distanceFromPlaceValue

我想在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会将locationdistanceFromPlaceValue嵌套到比我认为的要深的级别,因此最终将得到如下结构:

{
    '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
  }
)

10-06 08:27