重置Redux的状态数据的方法实现

 更新时间:2019年11月18日 09:56:21   作者:Sdbybyd  
这篇文章主要介绍了重置Redux的状态数据的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 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.js
const rootReducer = combineReducers({
 /* your app's top-level reducers */
})

 
export default rootReducer;

先封装一层,combineReducers 返回 reducer 函数,不影响功能

// reducers.js
const appReducer = combineReducers({
 /* your app's top-level reducers */
})

const rootReducer = (state, action) => {
 return appReducer(state, action)
}

export default rootReducer;

检测到特定重置数据的 action 后利用 undefined 技巧 (完整代码)

// reducers.js
const appReducer = combineReducers({
 /* your app's top-level reducers */
})

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?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JavaScript组成、引入、输出、运算符基础知识讲解

    JavaScript组成、引入、输出、运算符基础知识讲解

    JavaScript 被数百万计的网页用来改进设计、验证表单、检测浏览器、创建cookies,以及更多的应用。这篇文章主要介绍了JavaScript组成、引入、输出、运算符基础知识讲解,需要的朋友可以参考下
    2016-12-12
  • Paypal支付不完全指北

    Paypal支付不完全指北

    这篇文章主要介绍了Paypal支付不完全指北,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • JavaScript实现留言板实战案例

    JavaScript实现留言板实战案例

    这篇文章主要给大家介绍了关于JavaScript实现留言板的相关资料,使用JavaScript来编写留言板功能相信大家都不陌生,文中给出了详细的示例代码,需要的朋友可以参考下
    2023-07-07
  • js canvas实现画图、滤镜效果

    js canvas实现画图、滤镜效果

    这篇文章主要为大家详细介绍了js canvas实现画图、滤镜效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • javaScript中push函数用法实例分析

    javaScript中push函数用法实例分析

    这篇文章主要介绍了javaScript中push函数用法,较为详细的分析了javascript中push函数的功能、定义及使用技巧,需要的朋友可以参考下
    2015-06-06
  • 自定义javascript验证框架示例【附源码下载】

    自定义javascript验证框架示例【附源码下载】

    这篇文章主要介绍了自定义javascript验证框架,结合实例形式分析了javascript正则验证相关操作技巧,并附带源码供读者下载参考,需要的朋友可以参考下
    2019-05-05
  • 微信小程序自定义tabbar组件

    微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • js实现中文转拼音的完整步骤记录

    js实现中文转拼音的完整步骤记录

    这篇文章主要给大家介绍了关于js实现中文转拼音的相关资料,主要利用了pinyin-pro包,可以完美的实现所需要的功能,需要的朋友可以参考下
    2021-06-06
  • 每天一篇javascript学习小结(Array数组)

    每天一篇javascript学习小结(Array数组)

    这篇文章主要介绍了javascript中的Array数组知识点,对数组的基本使用方法,以及各种方法进行整理,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • 深入了解Javascript的事件循环机制

    深入了解Javascript的事件循环机制

    单线程的同步等待极大影响效率,任务不得不一个一个等待执行,对于网页应用是无法接受的。所以Javascript使用事件循环机制来解决异步任务的问题。本文就来讲讲Javascript的事件循环机制,希望对你有所帮助
    2022-09-09

最新评论