时间:2021-05-25
在 Redux 使用过程中,通常需要重置 store 的状态,比如应用初始化的时候、用户退出登录的时候,这样能够避免数据残留,避免 UI 显示了上一个用户的数据,容易造成用户数据泄露。
最简单的实现方法就是为每个独立的 store 添加RESET_APP 的 action,每次需要 reset 的时候,dispatch 这个 action 即可,如下代码
const usersDefaultState = [];const users = (state = usersDefaultState, { type, payload }) => { switch (type) { case "ADD_USER": return [...state, payload]; default: return state; }};添加 reset action 后:
const usersDefaultState = []const users = (state = usersDefaultState, { type, payload }) => { switch (type) { case "RESET_APP": return usersDefaultState; case "ADD_USER": return [...state, payload]; default: return state; }};这样虽然简单,但是当独立的 store 较多时,需要添加很多 action,而且需要很多个 dispatch 语句去触发,比如:
dispatch({ type: RESET_USER });dispatch({ type: RESET_ARTICLE });dispatch({ type: RESET_COMMENT });当然你可以封装一下代码,让一个RESET_DATA 的 action 去触发多个 reset 的 action,避免业务代码看上去太乱。
不过本文介绍一种更优雅的实现,需要用到一个小技巧,看下面代码:
const usersDefaultState = []const users = (state = usersDefaultState, { type, payload }) => {...}当函数参数 state 为 undefined 时,state 就会去 usersDefaultState 这个默认值,利用这个技巧,我们可以在 rootReducers 中检测 RESET_DATA action,直接赋值 undefined 就完成了所有 store 的数据重置。实现代码如下:
我们通常这样导出所有的 reducers
// reducers.jsconst rootReducer = combineReducers({ }) export default rootReducer;先封装一层,combineReducers 返回 reducer 函数,不影响功能
// reducers.jsconst appReducer = combineReducers({ })const rootReducer = (state, action) => { return appReducer(state, action)}export default rootReducer;检测到特定重置数据的 action 后利用 undefined 技巧 (完整代码)
// reducers.jsconst appReducer = combineReducers({ })const rootReducer = (state, action) => { if (action.type === 'RESET_DATA') { state = undefined } return appReducer(state, action)}参考:
Resetting Redux State with a Root Reducer
How to reset the state of a Redux store?
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
上篇文章写到了redux实现组件数据共享的方法,但是在react中,redux作者提供了一个更优雅简便的模块实现react组件之间数据共享。那就是利用react
本文实例为大家分享了react用Redux中央仓库实现一个todolist的具体代码,供大家参考,具体内容如下Redux简单介绍Redux是一个用来管理管理数据
前面学习了vue,react都有状态管理,如vue中的vuex是全局状态管理,在任何组件里都可以引用状态管理中的数据,同样,react中的redux和mbox也
在最近的一个项目中,要求对redux数据做持久化处理,经过研究后成功实现,在此记录一下过程我们可以使用redux-persist对数据做持久化处理安装npmi-
自己动手实现一个react-redux之前试过自己动手实现一个redux,这篇blog主要记录动手实现一个react-redux的过程。这个react-redu