2017-10-16 3 views
0

J'essaye d'implémenter une action d'état de réinitialisation de redux basée sur une suggestion de Dan Abramov here. J'ai installé mes réducteurs et magasin comme ceci:Redux - réinitialiser l'état

index.js:

import {applyMiddleware,createStore} from 'redux'; 
import combineReducers from './reducers/index'; 
import {wrapStore,alias} from 'react-chrome-redux'; 
import thunk from 'redux-thunk'; 
import aliases from './aliases/aliases'; 

const combineAppReducers = (state, action) => { 
    if (action.type === 'LOG_OUT') { 
    state = undefined; 
    } 

    return combineReducers(state, action) 
} 

const middlewares = [alias(aliases), thunk]; 

const store = createStore(combineAppReducers,applyMiddleware(...middlewares)); 

wrapStore(store, { 
    portName: 'example' 
}); 

Reducers.js:

import {combineReducers} from 'redux'; 
import userAuthReducer from './userAuthReducer'; 
import manageTeamsReducer from './manageTeamsReducer'; 

function lastAction(state = null, action) { 
    return action; 
} 

export default combineReducers({ 
    userAuthReducer,manageTeamsReducer,lastAction 
}); 

Il semble que j'ai mis tout correctement mais l'application ne réinitialise pas l'état, quelqu'un peut-il repérer où je me suis trompé?

Voici un autre article sur ce que je suivais de plus près:

https://medium.com/@agungsantoso/how-to-reset-the-state-of-a-redux-store-7f9d85b190bc

+0

Avez-vous essayé de placer l'état d'un objet vide? Comme 'state = {}'? – lumio

+0

Aussi quelles erreurs obtenez-vous? – lumio

+0

Je ne pense pas que ce soit le meilleur moyen, mais, vous pouvez rétablir votre état à son premier envoi de valeur: action @@ INIT'. – Hitmands

Répondre

0

Il est beau travail. Vous pouvez consulter mon extrait. Pouvez-vous télécharger un journal des erreurs?

function lastAction(state = null, action) { 
 
    return action; 
 
} 
 

 
function counter(state = 0, action) { 
 
    if (action.type === 'INC') { 
 
     return state+1; 
 
    } 
 
    
 
    return state; 
 
} 
 

 
const combineAppReducers = Redux.combineReducers({ 
 
    lastAction, 
 
    counter 
 
}); 
 

 
const combineReducers = (state, action) => { 
 
    if (action.type === 'LOG_OUT') { 
 
    state = undefined; 
 
    } 
 
    return combineAppReducers(state, action) 
 
} 
 

 
const store = Redux.createStore(combineReducers); 
 

 
const root = document.createElement('ul'); 
 
document.body.append(root); 
 
let unsubscribe = store.subscribe(() =>{ 
 
    const li = document.createElement('li'); 
 
    li.append(store.getState().counter); 
 
    root.append(li); 
 
}) 
 

 
store.dispatch({type: 'INC'}); 
 
store.dispatch({type: 'INC'}); 
 
store.dispatch({type: 'INC'}); 
 
store.dispatch({type: 'LOG_OUT'}); 
 
store.dispatch({type: 'INC'});
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width"> 
 
    <title>JS Bin</title> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.7.2/redux.js"></script> 
 
</head> 
 
<body> 
 
</body> 
 
</html>

+0

J'ai obtenu le code pour compiler (ont édité ci-dessus). Mes actions fonctionnent toutes comme elles sont censées le faire avec la nouvelle intégration mais l'action de déconnexion ne réinitialise toujours pas l'état ... –