Redux TypeError: невозможно прочитать свойство 'apply' из undefined

Я отключил инструменты разработки реагирования и инструменты разработки redux.

Я часами искал способы справиться с этой проблемой, и большинство проблем уже в компоновке, а я вообще не меняю код.

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;

Я действительно не понимаю, почему это произошло. Я ничего не меняю, и последнее, что я делаю, это просто добавляю git push origin master в свой репозиторий, и внезапно, когда я скомпилировал, я получил эту ошибку:

Я использую это в моем интерфейсе:

  "@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"

Бэкэнд:

 "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",
  },

Ошибка результата:

Redux TypeError: невозможно прочитать свойство 'apply' из undefined

Redux:

Redux TypeError: невозможно прочитать свойство 'apply' из undefined

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
43
0
44 950
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Последний стек показывает вызов compose в client/src/store.js:9, где вторым аргументом является window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__().

Однако, если у вас отключены инструменты разработчика, __REDUX_DEVTOOLS_EXTENSION__ не определен и становится вторым аргументом для создания функции. Он по-прежнему предоставляется явно, что отличается от того, что он неявно не определен по пропуску, поэтому реализация compose считает, что есть два действительных аргумента, и ожидает, что они будут функциями, а не неопределенными.

Вы должны вернуть фиктивную функцию в случае, если нет доступных инструментов разработчика, что-то вроде «возможно», хотя я не совсем уверен, какой должна быть точная подпись, чтобы удовлетворить функцию createStore.

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

Я отключил React devtools и redux devtools, и результаты все те же

user10583820 28.11.2018 12:01
Ответ принят как подходящий

Обновите инструменты redux dev с 2.16.0 до 2.16.1

ИЛИ

Удалите эту строку из своего кода

window.__REDUX_DEVTOOLS_EXTENSION__&& window.__REDUX_DEVTOOLS_EXTENSION__()

Почему это произошло?

user10583820 28.11.2018 12:14

Была проблема с новым выпуском v2.16.0 redux-devtools-extension. Но теперь исправим в v2.16.1

sultan aslam 28.11.2018 12:23

У меня была такая же проблема, когда я хотел протестировать свое веб-приложение в окне инкогнито (расширения не отображаются в окнах в режиме инкогнито).

Проблема в том, что compose от redux ожидает, что все его аргументы будут функциями. Так когда

window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() 

оценивается в этой среде, он возвращает логическое значение.

Как упоминал @knutwalker. Вам нужно будет вернуть функцию, которая ничего не возвращает. Это исправило это для меня,

      window.__REDUX_DEVTOOLS_EXTENSION__
        ? window.__REDUX_DEVTOOLS_EXTENSION__()
        : f => f

работал у меня. В моем случае приложение вылетало, когда я открывал localhost в браузере Opera (где я не установил redux devtools). В хроме он работал нормально, так как у меня есть расширение. Спасибо!

Drusto 06.06.2019 22:16

Что касается меня, я добавил расширение redux-devtools в Chrome, и ошибка исчезла, как только я добавил в браузер redux-devtools, и вам также не нужно использовать тернарный оператор.

https://github.com/reduxjs/redux/issues/2359#issuecomment-362340634

В моем случае лучший способ решить эту проблему - просто.

Вы знаете, что кипарис открывает хром в режиме разработчика, в котором нет ваших расширений, включая redux devtools.

Итак, когда окно на Chrome открывается с ошибкой, нажмите меню> дополнительные инструменты> Расширения и перейдите в интернет-магазин Chrome из, чтобы установить redux devtools.

Причина этой ошибки в самом вопросе. Просто включить расширение React и Redux DevTools. Это сработало для меня из-за той же ошибки.

Убедитесь, что у вас есть скачано расширение redux-devtools для Chrome, и измените доступ к сайту на На всех сайтах или по конкретным, перейдя в Управление расширением> Redux DevTools (подробности)> Доступ к сайту

Это случилось со мной с версией 2.17.0 Redux DevTools.

Что-то испортилось в расширении.

Я просто удалил расширение из Chome, переустановил его, и оно отлично заработало.

Эта ошибка возникает из-за:

const store=createStore(rootreducer,
    initialstate,
    compose(applyMiddleware(...middleware),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())
)

При развертывании проекта вы этого не сделали:

window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() 

Во время выполнения команды npm run build убедитесь, что вы удалили это. Правильный способ:

const store=createStore(rootreducer,
    initialstate,
    compose(applyMiddleware(...middleware))
)

Я столкнулся с аналогичной проблемой, и удаление этих строк помогло,

 window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()

но это не постоянное решение, так как для повторного использования инструментов redux dev вам понадобятся эти строки. Вместо этого используйте

process.env.NODE_ENV== = "development" ?
       window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() : compose,

он использует переменные env, чтобы проверить погоду, использовать ли промежуточное ПО инструментов Reduxdev или нет. так как я не видел этого решения в этой теме, я опубликовал его, надеюсь, что оно будет кому-то полезно ..

Я изменился

window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()

к этому:

typeof window.__REDUX_DEVTOOLS_EXTENSION__ === "undefined"
? a => a
: window.__REDUX_DEVTOOLS_EXTENSION__ &&
    window.__REDUX_DEVTOOLS_EXTENSION__()

и проблема была решена

Это сработало для меня:

Эта ошибка возникает из-за:

const store=createStore(rootreducer,
    initialstate,
    compose(applyMiddleware(...middleware),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())
)

При развертывании проекта удалите последнюю строку следующим образом:

window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()

При выполнении команды npm run build убедитесь, что вы удалили это. Правильный способ:

const store=createStore(rootreducer,
    initialstate,
    compose(applyMiddleware(...middleware))
)

Была такая же ошибка в окне Chrome в режиме инкогнито. Поменял на нормальный Chrome, и все заработало.

Это полный отвечать @Koop, который мне подходит:

Для всех, кто столкнулся с ошибкой TypeError: невозможно прочитать свойство «apply» of undefined »в node_modules / redux / es / redux.js: error: Немедленное исправление: установите расширение Chrome Redux Devtools. Постоянное исправление для всех браузеров:

  1. В каталоге клиента: npm install --save-dev redux-devtools-extension
  2. Измените client / src / store / index.js на:

import { applyMiddleware, createStore, } from ‘redux’;
import createSagaMiddleware from ‘redux-saga’;

import rootReducer from ‘./reducers/index’;
import rootSaga from ‘./sagas/index’;
import { composeWithDevTools } from ‘redux-devtools-extension’;

const sagaMiddleware = createSagaMiddleware();
const store = createStore(
  rootReducer,
  composeWithDevTools(applyMiddleware(sagaMiddleware))
);
sagaMiddleware.run(rootSaga);
export default store;

В моем случае эта ошибка вызывала пустой / белый экран в производственной сборке в мобильном браузере, но не в браузере настольного компьютера. Принятый ответ не сработал для меня, мне пришлось удалить строку, добавить расширение devtools и выполнить рефакторинг для использования импорта composeWithDevTools. То есть ответ от @Roman был для меня полностью рабочим решением (спасибо, сэр). Но это может помочь другим пояснить, что проблема может возникать независимо от саги о сокращении. Мое приложение просто использовало базовый redux-thunk. Я установил redux-devtools-extension в качестве зависимости разработчика, а затем заменил это:

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

const initialState = {};

const middleware = [thunk];

if (nodeEnv !== 'production') {
  const store = createStore(rootReducer, initialState, compose(applyMiddleware(...middleware)));
} else {
  const store = createStore(
    rootReducer,
    initialState,
    compose(
      applyMiddleware(...middleware),
      window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
    ),
  );
}

export default store;

с этим:

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

const initialState = {};

const middleware = [thunk];

const store = createStore(
  rootReducer,
  initialState,
  composeWithDevTools(applyMiddleware(...middleware))
);

export default store;

И это исправило это.

изменение этой строки

window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()

к

window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f

решит проблему, и это сработало для меня.

Перед ошибкой:

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;

После удаления ошибки:

В Store.js мы должны удалить

window.REDUX_DEVTOOLS_EXTENSION && window.REDUX_DEVTOOLS_EXTENSION()

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)
));

export default store;

Другие вопросы по теме