Redux TypeError:无法读取undefined的属性'apply'

9 reactjs redux react-redux

我已经禁用反应devtools和redux devtools.

我一直在寻找解决这个问题几个小时的方法,而且大部分问题都在撰写,而我根本就没有改变代码.

import { createStore, applyMiddleware,compose } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';

const initialState={};

const middleware = [thunk];

const store = createStore(rootReducer,initialState,
    compose(
        applyMiddleware(...middleware),
        window.__REDUX_DEVTOOLS_EXTENSION__&& window.__REDUX_DEVTOOLS_EXTENSION__()
        )   
    );


export default store;
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么会这样.我没有改变任何东西,我做的最后一件事就是把git push origin master放到我的存储库中,突然间我编译时遇到了这个错误:

Iam在我的前端使用这个:

  "@material-ui/core": "^3.3.1",
    "@material-ui/icons": "^3.0.1",
    "axios": "^0.18.0",
    "jwt-decode": "^2.2.0",
    "prop-types": "^15.6.2",
    "react": "^16.6.0",
    "react-dom": "^16.6.0",
    "react-redux": "^5.1.0",
    "react-router-dom": "^4.3.1",
    "react-scripts": "2.0.5",
    "react-select": "^2.1.1",
    "recharts": "^1.3.5",
    "redux": "^4.0.1",
    "redux-thunk": "^2.3.0",
    "typeface-roboto": "0.0.54"
Run Code Online (Sandbox Code Playgroud)

后端:

 "dependencies": {
    "bcryptjs": "^2.4.3",
    "body-parser": "^1.18.3",
    "express": "^4.16.4",
    "mongoose": "^5.3.11",
    "multer": "^1.4.1",
    "passport": "^0.4.0",
    "passport-jwt": "^4.0.0",
    "path": "^0.12.7",
    "validator": "^10.9.0",
    "xlsx": "^0.14.1"
  },
  "devDependencies": {
    "concurrently": "^4.0.1",
    "nodemon": "^1.18.6",
  },
Run Code Online (Sandbox Code Playgroud)

结果错误:

图像错误1

Redux:

图像错误2

sul*_*lam 17

将Redux开发工具从2.16.0更新到2.16.1

要么

从您的代码中删除此行

window.__REDUX_DEVTOOLS_EXTENSION__&& window.__REDUX_DEVTOOLS_EXTENSION__()
Run Code Online (Sandbox Code Playgroud)


小智 9

当我想在隐身窗口上测试我的Web应用程序时遇到了同样的问题(扩展名不会显示在隐身窗口上)。

问题是,composeredux期望它的所有参数都是函数。所以什么时候

window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() 
Run Code Online (Sandbox Code Playgroud)

在该环境中评估,则返回一个布尔值。

正如@knutwalker所提到的。您需要返回不返回任何内容的函数。这为我解决了

      window.__REDUX_DEVTOOLS_EXTENSION__
        ? window.__REDUX_DEVTOOLS_EXTENSION__()
        : f => f
Run Code Online (Sandbox Code Playgroud)


knu*_*ker 7

最后一个堆栈显示了对 compose 的调用,client/src/store.js:9其中第二个参数是window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()

但是,如果您禁用了 devtools, __REDUX_DEVTOOLS_EXTENSION__则未定义并成为 compose 函数的第二个参数。它仍然是显式提供的,这与它通过省略隐式未定义不同,因此 compose 实现认为有两个有效参数并期望它们是函数,而不是未定义的。

如果没有可用的 devtools,您应该返回一个虚拟函数,例如可能,尽管我不太确定确切的签名必须是什么才能满足 createStore 函数。

window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : (a) -> a