错误:Reducer“getSelectedItem”在初始化期间返回未定义

时间:2017-12-05 14:11:34

标签: reactjs redux

在Redux使用我的React App的最后几天,我度过了一段艰难时期。我需要根据另一个ItemSelector组件中的当前selectedItemId来创建一个组件“Item”来render()。基本上我在这一点上有这个工作:

ItemSelector.js:

[...]
import { createStore, bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import { selectItem } from "../reducers"

const store = createStore(selectItem)

const mapDispatchToProps = (dispatch) => ({
  selectItem: bindActionCreators(selectItem, dispatch)
})

class ItemSelector extends React.Component {
    render() {
        [...]
        this.props.selectItem(ItemId)
        [...]
    }
}

export default connect(() => ({}), mapDispatchToProps)(ItemSelector)

Item.js:

[...]
import { createStore } from 'redux'
import { connect } from 'react-redux'
import { getSelectedItem } from '../reducers'

function mapStateToProps(state, ownProps) {
    return {
        itemId: getSelectedItem(state)
    }
}

class Item extends React.Component {
    render() {
        [...]
        {this.props.itemId}
        [...]
    }
}

export default connect(mapStateToProps)(Item)

减速器/ index.js

const SELECT_ITEM = "SELECT_ITEM"

export const selectItem = (itemId) => {
  return {
    type: SELECT_ITEM,
    itemId
  }
}

export const getSelectedItem = (state) => {
  return state
}

export default (state = 'DEFAULT_ITEM', action) => {
  switch (action.type) {
    case SELECT_ITEM:
      return action.itemId
    default:
      return state
  }
}

现在,我想为其他用例添加更多reducers,这意味着使用index.js,并在reducers /目录中添加更多文件。所以,我主动将reducers / index.js的名称更改为reducers / Items.js,并添加了一个新的reducers / index.js:

import { combineReducers } from 'redux'

import { selectItem, getSelectedItem } from './Items';

export default combineReducers({ selectItem, getSelectedItem })

我有这个错误:

Error: Reducer "getSelectedItem" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.
./src/reducers/index.js
> 5 | export default combineReducers({ selectItem, getSelectedItem })

根据我在Google和StackOverFlow上发现的内容,我需要通过reducer返回的默认状态来解决这个问题,但事实已如此。你有什么主意吗 ?我现在有点困惑。

0 个答案:

没有答案
相关问题