web-dev-qa-db-fra.com

"Erreur: Erreur: Erreur: Erreur: Vous ne pouvez pas appeler store.getState () pendant l’exécution du réducteur." ????

Je viens de mettre à niveau mon application reag native entièrement fonctionnelle vers Redux v4, mais maintenant, le message d'erreur suivant s'affiche:

Erreur: Erreur: Erreur: Erreur: vous ne pouvez pas appeler store.getState () pendant l'exécution du réducteur. Le réducteur a déjà reçu l'état en tant qu'argument. Faites-le passer par le réducteur supérieur au lieu de le lire dans le magasin.

Je soupçonne que le problème est que j’ai de nombreux composants dans d’autres, chacun avec leur propre connect(mapStateToProps, mapDispatchToProps)(Component) et je suppose que ce n’est pas la bonne façon de l’appliquer, bien que je ne sois pas sûr de la bonne façon de s’y prendre.

Toute direction est grandement appréciée!

Trace de la pile:

    This error is located at:
    in Connect(SideBarApp) (at SceneView.js:9)
    in SceneView (at createTabNavigator.js:10)
    in RCTView (at View.js:43)
    in RCTView (at View.js:43)
    in ResourceSavingScene (at createBottomTabNavigator.js:86)
    in RCTView (at View.js:43)
    in RCTView (at View.js:43)
    in TabNavigationView (at createTabNavigator.js:127)
    in NavigationView (at createNavigator.js:59)
    in Navigator (at createNavigationContainer.js:376)
    in NavigationContainer (at SceneView.js:9)
    in SceneView (at SwitchView.js:12)
    in SwitchView (at createNavigator.js:59)
    in Navigator (at createNavigationContainer.js:376)
    in NavigationContainer (at AppNavigator.js:36)
    in App (created by Connect(App))
    in Connect(App) (at index.ios.js:23)
    in Provider (at index.ios.js:22)
    in TheNewsApp (at renderApplication.js:32)
    in RCTView (at View.js:43)
    in RCTView (at View.js:43)
    in AppContainer (at renderApplication.js:31)

This error is located at:
    in NavigationContainer (at SceneView.js:9)
    in SceneView (at SwitchView.js:12)
    in SwitchView (at createNavigator.js:59)
    in Navigator (at createNavigationContainer.js:376)
    in NavigationContainer (at AppNavigator.js:36)
    in App (created by Connect(App))
    in Connect(App) (at index.ios.js:23)
    in Provider (at index.ios.js:22)
    in TheNewsApp (at renderApplication.js:32)
    in RCTView (at View.js:43)
    in RCTView (at View.js:43)
    in AppContainer (at renderApplication.js:31)

This error is located at:
    in NavigationContainer (at AppNavigator.js:36)
    in App (created by Connect(App))
    in Connect(App) (at index.ios.js:23)
    in Provider (at index.ios.js:22)
    in TheNewsApp (at renderApplication.js:32)
    in RCTView (at View.js:43)
    in RCTView (at View.js:43)
    in AppContainer (at renderApplication.js:31)
getState@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:79579:24
runComponentSelector@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:78896:56
initSelector@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:79019:28
Connect(SideBarApp)@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:78969:29
constructClassInstance@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:20826:32
updateClassComponent@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:22393:35
performUnitOfWork@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:24922:27
workLoop@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:24955:47
renderRoot@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:24988:21
performWorkOnRoot@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:25549:23
performWork@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:25481:30
performSyncWork@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:25456:20
requestWork@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:25362:26
scheduleWork@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:25224:28
enqueueSetState@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:20681:23
setState@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:2380:37
dispatch@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:80901:27
navigate@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:80517:24
nav@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:80470:44
combination@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:79810:38
dispatch@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:79628:38
setLoginStatus@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:112247:19
http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:112199:44
tryCallOne@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:8818:16
http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:8919:27
_callTimer@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:8162:17
_callImmediatesPass@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:8198:19
callImmediates@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:8417:33
__callImmediates@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:7741:32
http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:7580:34
__guard@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:7721:15
flushedQueue@http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false:7579:21
flushedQueue@[native code]
invokeCallbackAndReturnFlushedQueue@[native code]
64
bbrodsky

C'est un problème avec la nouvelle version v2.16.0 de redux-devtools-extension .

Voici quelques solutions de contournement pendant que nous attendons le correctif ...

  1. Revenez à la version de travail v2.15.5 ( pour Chrome )

  2. Ou tout simplement désactivez votre extension redux-devtool pour le moment.

    • soit au niveau du navigateur ou via votre code (où vous créez le magasin Redux)

FYI: cela ne résout pas la question du PO mais résout le problème suivant: les développeurs reçoivent le message d'erreur ci-dessous débutant le 27/11/18.

Error: You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.


UPDATE

v2.16.2 a été publié

Pour ceux qui avaient précédemment désactivé l’extension, il suffit de la réactiver et mettez à jour vos outils de développement redux de 2.16.0 à 2.16.2 Mise à jour des outils de développement Redux

189
Victor Le

Dans mon cas, je dois enlever composeWithDevTools - un plugin pour chrome

import { createStore, combineReducers, applyMiddleware } from 'redux';
import { composeWithDevTools } from 'redux-devtools-extension';
import thunk from 'redux-thunk';

// const enhancer = composeWithDevTools(applyMiddleware(thunk))
const enhancer = applyMiddleware(thunk)

const store = createStore(reducers, enhancer);
23
Cong Dan Luong

Dans mon projet. Ce problème vient de nulle part un jour.

Ma solution: Désactivez l'extension Chrome - Redux Devtools. Alors tout est revenu à la normale.

Donc, avec ce genre d'erreur, vous devriez tester plusieurs navigateurs pour trouver le problème.

11
Van Hoang Truong

Désactiver l'extension chrome ou supprimer composeWithDevTool de votre code fonctionnera comme une solution rapide. Mais nous savons tous que nous avons besoin de l'extension pour pouvoir suivre l'état de notre application et la gérer correctement. J'ai donc créé un problème aujourd'hui, s'il vous plaît, soutenez si tout va bien, quelqu'un de l'équipe de redux nous contactera.

Ou si vous recherchez une solution temporaire (pour chrome), vous pouvez télécharger https://github.com/zalmoxisus/redux-devtools-extension/releases/download/2.15.5/extension.Zip = puis extrayez-le dans un dossier.

Tapez chrome: // extensions et activez le mode développeur en haut à gauche, puis cliquez sur Charger un fichier décompressé et sélectionnez le dossier extrait à utiliser.

Problème: https://github.com/reduxjs/redux-devtools/issues/41

5
Alqama Bin Sadiq

Solution qui fonctionne pour moi

Désactivez l'extension Chrome de Redux Dev tools . ou supprimez enregistreur de votre code.

update : Mettez à jour vos outils de développement Redux de 2.16.0 à 2.16.1 Mise à jour des outils de développement Redux .

5
sultan aslam

J'ai eu la même erreur avec un build PWA avec polymer 3. Le store.js a également essayé d'utiliser les outils de redux dev que je devais désactiver:

...
// Sets up a Chrome extension for time travel debugging.
// See https://github.com/zalmoxisus/redux-devtools-extension for more information.
//const devCompose = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const devCompose =  compose;

// Initializes the Redux store with a lazyReducerEnhancer (so that you can
// lazily add reducers after the store has been created) and redux-thunk (so
// that you can dispatch async actions). See the "Redux and state management"
// section of the wiki for more details:
// https://github.com/Polymer/pwa-starter-kit/wiki/4.-Redux-and-state-management
export const store = createStore(
  state => state,
  devCompose(
    lazyReducerEnhancer(combineReducers),
    applyMiddleware(thunk))
);
...
2

Moi aussi j'ai eu cette même erreur lors de l'utilisation de redux-thunk, réact-native-router-flux et je pouvais le résoudre en ajoutant un délai d'attente dans le réducteur.

setTimeout(()=>{
                Actions.main();
                return state;
            },1)
2
Jose Kj

Devrait être corrigé maintenant. Mettez à jour vos outils de redux dev de 2.16.0 à 2.16.1

https://github.com/zalmoxisus/redux-devtools-extension/issues/588#issuecomment-44239654

2
andrevenancio

C’est ce que j’ai fait: je viens de commenter la ligne pour Chrome Redux Devtools Extension à partir de mon fichier store.js.

....

 const store = createStore(
  rootReducer,
  initialState,
  compose(
    applyMiddleware(...middleware)
   ///This line--> window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() 
  )
);

....

Et la question ne fait que commencer il y a une heure. Comme nous le savons tous, l’extension est très utile pendant le développement, attendons donc la solution réelle des autorités.

2
Fawaz Abdulla

Dans mon cas, le problème n'était pas lié à l'extension dev. J'ai rencontré cette erreur alors que je travaillais avec la liaison profonde: la requête de routage était mise à jour dans réducteur. La logique d'emballage liée à la manipulation de l'URL dans settimeout a corrigé l'erreur.

0
bruddha