Javascript React/Redux无法读取属性“;“当前机遇”;未定义的

Javascript React/Redux无法读取属性“;“当前机遇”;未定义的,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我的Redux mapStateToProps函数抛出一个错误,表示state.currentOpportunities未定义,但遇到问题。奇怪的是,organizationReducer中定义的初始状态只能在State.\u root.entries.organization.currentOpportunity下到达,而不是在主index.js文件中的I console.log I console.log状态下通过State.organization.currentOpportunity到达

我的Redux mapStateToProps函数抛出一个错误,表示state.currentOpportunities未定义,但遇到问题。奇怪的是,organizationReducer中定义的初始状态只能在State.\u root.entries.organization.currentOpportunity下到达,而不是在主index.js文件中的I console.log I console.log状态下通过State.organization.currentOpportunity到达

const mapStatetoProps = (state) => {
  console.log(state)
  return {
    currentOpportunities: state.organization.currentOpportunities,
    expiredOpportunities: state.organization.expiredOpportunities
  };
}

export default connect(mapStatetoProps, actions)(OpportunitiesPage);

主App.js文件

const initialState = {}
const history = createHistory();
const store = configureStore(initialState, history);
const MOUNT_NODE = document.getElementById('app');

const render = messages => {
  ReactDOM.render(
    <Provider store={store}>
      <LanguageProvider messages={messages}>
        <ConnectedRouter history={history}>
          <App />
        </ConnectedRouter>
      </LanguageProvider>
    </Provider>,
    MOUNT_NODE,
  );
};
我的根还原文件

export default function createReducer(injectedReducers) {
  return combineReducers({
    organization: organizationReducer,
    ...injectedReducers
  })
}
index.js文件

const mapStatetoProps = (state) => {
  console.log(state)
  return {
    currentOpportunities: state.organization.currentOpportunities,
    expiredOpportunities: state.organization.expiredOpportunities
  };
}

export default connect(mapStatetoProps, actions)(OpportunitiesPage);

有人知道这里可能发生什么吗?

state.organization.currentOpportunity未定义,因为state是一个不可变的映射,您试图像访问对象一样访问它的字段

您必须更新reducer逻辑以使用合并对象的不可变API,例如

或者从不可变的数据结构转换为可变的javascript对象。e、 g

  stateObject = state.toJS()
  return {
      currentOpportunities: stateObject.organization.currentOpportunities,
      //...
由于跟踪对象实例的状态可能会带来一些麻烦,因此我建议在组件状态中使用不可变的数据结构或可变的Javascript对象

下面是使用不可变映射API的MapStateTops


state.organization.currentOpportunity
未定义,因为state是一个不可变映射,您试图像访问对象一样访问它的字段

您必须更新reducer逻辑以使用合并对象的不可变API,例如

或者从不可变的数据结构转换为可变的javascript对象。e、 g

  stateObject = state.toJS()
  return {
      currentOpportunities: stateObject.organization.currentOpportunities,
      //...
由于跟踪对象实例的状态可能会带来一些麻烦,因此我建议在组件状态中使用不可变的数据结构或可变的Javascript对象

下面是使用不可变映射API的MapStateTops


你能访问组织减速器吗?我的意思是,你能用Redux开发工具检查一下它,看看里面有什么吗?我检查了Redux开发工具,它看起来像是在状态选项卡下的@init下,它将currentOpportunities和expiredOpportunities的组织初始化值显示为reducer中的空数组。@riku12764,您的
操作有效负载的结构是什么?也许你还想再次检查为什么在
获取组织机会
中有一个
数据
键。你的InjectedReducer里面是什么?@George.s,目前InjectedReducer里面什么都没有(只是一个占位符,直到我让它在最基本的层面上工作),你能访问ORGANIZATION reducer吗?我的意思是,你能用Redux开发工具检查一下它,看看里面有什么吗?我检查了Redux开发工具,它看起来像是在状态选项卡下的@init下,它将currentOpportunities和expiredOpportunities的组织初始化值显示为reducer中的空数组。@riku12764,您的
操作有效负载的结构是什么?也许你还想再次检查为什么在
获取组织机会
中有一个
数据
键。你的injectedReducers里面是什么?@George.s,目前injectedReducers里面什么都没有(只是一个占位符,直到我让它在最基本的层面上工作)
是最重要的。
mapstatetops
的返回是一个新对象,因此在组件中使用
props
时,它根本不会修改
state
。因此,这并没有直接回答问题,只是建议使用其他库。@codekaizer我不是建议使用其他库。该库已经被使用,但OP似乎将Javascript对象与不可变映射实例混淆。我建议OP坚持在状态中使用Javascript对象,或者使用不可变映射对象。嗨@OluwafemiSule,我尝试了上面的建议,但我得到了与以前相同的错误。据我所知,似乎MapStateTops在操作运行之前就已经发生了。仍然不确定问题出在哪里,
是问题的关键。
mapstatetops
的返回是一个新对象,因此在组件中使用
props
时,它根本不会修改
state
。因此,这并没有直接回答问题,只是建议使用其他库。@codekaizer我不是建议使用其他库。该库已经被使用,但OP似乎将Javascript对象与不可变映射实例混淆。我建议OP坚持在状态中使用Javascript对象,或者使用不可变映射对象。嗨@OluwafemiSule,我尝试了上面的建议,但我得到了与以前相同的错误。据我所知,似乎MapStateTops在操作运行之前就已经发生了。但仍然不确定问题出在哪里
  return {
      currentOpportunities: state.getIn(['organization', 'currentOpportunities'])
      //...