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]
Voici quelques solutions de contournement pendant que nous attendons le correctif ...
Revenez à la version de travail v2.15.5 ( pour Chrome )
chrome://extensions
dans l'URL et basculez sur developer mode
sur le top right
de la page.Load Unpacked
apparaîtra. Après avoir cliqué sur le bouton, sélectionnez le dossier extrait.Ou tout simplement désactivez votre extension redux-devtool pour le moment.
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.
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
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);
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.
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
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 .
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))
);
...
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)
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
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.
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.