-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何清空 redux 信息? #907
Comments
我想到一种办法,写一个公用方法,取消注册model, |
写一个专门的reducer去清? |
@xufei 飞姐,借道问下,dva为什么好久没更新了,在憋大招吗? |
实际业务中,很多model带有初始state的,单纯的清空state中的数据对象容易出现问题. |
感觉,不应该会出现这种现象吧。第一个校区的初始化信息,也应该是有 action 吧,切换校区,不应该是也调用这个 action 吗? 即使你全部重置了 state ,切换校区的时候 action 之后,不应该是自动就初始化好了吗? |
如果确实是重置整个 state 那 @xufei 的方法是最简单的: // const initialState = ...;
const app = dva({
onReducer: reducer => {
return (state, action) => {
if (action.type === 'RESET') {
return initialState;
}
return state;
};
}
});
// Usage
dispatch({ type: 'RESET' }); |
从网上搜过来,照着 @xufei 老大的代码搞了半天,就是跑不起来。花了半天才搞清楚状况,使用 onReducer 的时候除了要返回新的 state,还需要返回一个 routing 才行。参考了 dva/test/reducers-test.js 的代码 本人项目基于 antd-pro,需要在 首先,在 import defaultSettings from './defaultSettings';
export default {
setting: defaultSettings,
loading: {
effects: {},
},
global: {
layout: 'basic', // Page layout switch (options: basic | map)
collapsed: false,
notices: [],
},
login: {
status: false,
authority: 'guest',
},
register: {
status: false,
},
} 然后,在 import initialState from './initialState';
// eslint-disable-next-line
export const dva = {
config: {
initialState,
onReducer(reducer) {
return (state, action) => {
const newState = action.type === 'RESET' ? initialState : reducer(state, action);
return { ...newState, routing: newState.routing };
};
},
},
}; 这样定义好,在需要的地方(比如 logout)就可以直接使用,比如修改 antd-pro 顶部菜单 class HeaderView extends PureComponent {
...
handleMenuClick = ({ key }) => {
...
if (key === 'logout') {
dispatch({ type: 'RESET' });
dispatch({ type: 'login/logout' });
}
};
...
} |
在应用开始的时候把初始state存下来,作为reset的数据是否可行 |
你好,我按照你写的,运行时报错:Uncaught (in promise) Could not find router reducer in state tree, it must be mounted under "router" 也就是 routing 这个在 initialState 对象中没有,这个应该是从哪里定义的? |
你这个有完整的代码吗?在app.js里面定义完dva后,在哪调用的或者说启动的呢? |
@laozhu 可以去除 export const dva = {
config: {
onReducer(reducer) {
return (state, action) => {
const newState = action.type === 'RESET' ? reducer({},{type:'@@INIT'}) : reducer(state, action);
return { ...newState, routing: newState.routing };
};
},
},
}; 当需要重置所有的model时 class HeaderView extends PureComponent {
...
handleMenuClick = ({ key }) => {
...
if (key === 'logout') {
dispatch({ type: 'RESET' });
dispatch({ type: 'login/logout' });
}
};
...
} |
|
action.type === "@@init"我改成action.type.indexOf('@@redux/INIT') === 0 |
dva-reset-state 一个插件,直接拿过来用,大家可以参考下 |
例如 redux-reset
如何清空 redux 的信息?
使用场景:
一个人员管理多个校区,每个校区的信息不通,切换校区时候,为了避免旧数据造成的问题,只好使用 location.reload() 强制页面刷新以便更新全部内存信息。
想要做到在不刷新页面的清空下,清空 redux 的数据?
The text was updated successfully, but these errors were encountered: