Redux - 重置状态
问题描述:
我正在尝试基于Dan Abramov here的建议来实现redux重置状态操作。我设置我的减速器和存储,像这样:Redux - 重置状态
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
});
看起来好像我已经正确设置好一切,但应用程序没有重置状态,任何人都可以发现我出错的地方吗?
这里是它的另一篇文章,我更紧随其后:
https://medium.com/@agungsantoso/how-to-reset-the-state-of-a-redux-store-7f9d85b190bc
答
它做工精细。 你可以查看我的代码片段。 你能上传错误日志吗?
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
我得到了编译代码(已编辑上述)。我的行动都是如何应对新的整合,但注销行动仍然不会重置状态...... –
你试过设置状态到一个空对象?像'state = {}'? – lumio
你还得到什么错误? – lumio
我认为这不是最好的方法,但是,您可以将您的状态恢复为第一个调度值:'@@ INIT'操作。 – Hitmands