reactjs - 未捕获的 TypeError : store. getState 不是函数

标签 reactjs redux

在我的 redux js 应用程序(google appengine 后端)中,打开包含 Root 组件的页面时,我收到以下警告和错误消息。

警告:失败的 propType:无效的 prop store类型 function供应给Provider ,预计object 。检查 Root 的渲染方法。 Bundle.js:6169

警告:失败的 propType:无效的 prop store类型 function供应给DevToolsWrapper ,预计object 。检查 Root 的渲染方法。 Bundle.js:6169

警告:失败的上下文类型:无效的子上下文 store类型 function供应给Provider ,预计object 。检查 Root 的渲染方法。 Bundle.js:6169

警告:失败的上下文类型:无效上下文 store类型 function供应给Connect(AsyncApp) ,预计object 。检查 Provider 的渲染方法.

Uncaught TypeError: store.getState is not a function

这是在react-redux的lib/components/createConnect.js中发生错误的地方。

    function computeStateProps(store, props) {
      var state = store.getState();  <<<<< The error occurs here.
      var stateProps = shouldUpdateStateProps ? finalMapStateToProps(state, props) : finalMapStateToProps(state);

      _invariant2['default'](_utilsIsPlainObject2['default'](stateProps), '`mapStateToProps` must return an object. Instead received %s.', stateProps);
      return stateProps;
    }

在断点处,就在发生此错误之前,console.log(store) 返回此错误。

function (reducer, initialState) {
      var store = next(reducer, initialState);
      var _dispatch = store.dispatch;
      var chain = [];

      var middlewareAPI = {
        getState: store.…

但是,当我使用 Node 后端运行完全相同的代码时,console.log(store) 返回此对象。

devToolsStore: Object
dispatch: (action)
getReducer: getReducer()
getState: getState()
replaceReducer: replaceReducer(nextReducer)
subscribe: subscribe(listener)

我的根组件和configureStore.js 如下所示:

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import configureStore from '../store/configureStore';

import { createStore, applyMiddleware, combineReducers, compose } from 'redux';
import { DevTools, DebugPanel, LogMonitor } from 'redux-devtools/lib/react';


import AsyncApp from './AsyncApp';

const store = configureStore();

export default class Root extends Component {
  render() {
return (
 <div>
  <Provider store={store}>
    {() => <AsyncApp />}
  </Provider>
  <DebugPanel top right bottom>
    <DevTools store={store} monitor={LogMonitor} />
  </DebugPanel>
</div>
);
}
}

configureStore.js

import { createStore, applyMiddleware, combineReducers, compose } from "redux";
import thunkMiddleware from "redux-thunk";
import loggerMiddleware from "redux-logger";
import rootReducer from "../reducers";
import thunk from 'redux-thunk';
import { devTools, persistState } from 'redux-devtools';

const finalCreateStore = compose(
    applyMiddleware(thunkMiddleware),
    devTools(),
    persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)),
    createStore
);

export default function configureStore(initialState) {
  return finalCreateStore(rootReducer, initialState);
}

最佳答案

我的猜测是您正在运行较旧的示例代码。有一个breaking change in Redux 2.0 compose() function API .

而不是

const finalCreateStore = compose(
    applyMiddleware(thunkMiddleware),
    devTools(),
    persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)),
    createStore
);

你可能想要

const finalCreateStore = compose(
    applyMiddleware(thunkMiddleware),
    devTools(),
    persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
)(createStore);

关于reactjs - 未捕获的 TypeError : store. getState 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879588/

相关文章:

reactjs - React Router - 如何确定后退按钮是否被点击?

reactjs - 在没有 Reducer 的情况下在 Reducer 中设置 redux 状态

reactjs - 使用 Redux 进行 React 引导

javascript - 在 redux reducer 中如何更新数组对象内的 1 个属性

javascript - 在 enzyme 浅渲染中将 jest.fn() 函数传递给 mapDispatchToProps

javascript - 如何在多个组件中共享 redux store

javascript - 为什么 redux 每次更改时都需要复制数据?

javascript - 如何在 React 应用程序中使用 Fetch 向 Flask API 发送 POST 请求

javascript - 在 React Js 中设置状态

javascript - react 状态值不更新