zoukankan      html  css  js  c++  java
  • react中手动重置redux

    前段时间使用redux在react-native中,安卓后退两次关闭后redux未清空的问题,一直觉得处理的不够优雅,没有根本解决问题。

    后来发现再退出登录后,也有部分数据因为redux的逻辑处理数据缓存问题被留了下来,造成一些意料之外的问题,于是要彻底解决重置redux的办法。

    我的解决方法是,写一个action用来处理退出登录,每个reducer都监听这个type,return初始值。

    //action
    export const LOGIN_OUT = 'LOGIN_OUT';
    
    export const loginOut = () => {
        return {
            type: LOGIN_OUT
        }
    }

      

    //reducer
    import * as User from '../actions/userAction';
    
    const user = {
        type: 0,
        name: '',
        uid: '',
        phone: ''
    }
    export default (state = user, action) => {
        switch (action.type) {
    
           ......
    
            case User.LOGIN_OUT:
                return user
                break;
            default:
                return state;
        }
    
    }
    //其他reducer
    import { LOGIN_OUT } from '../actions/userAction';
    
    const finance = {
        ...
    }
    export default (state = finance, action) => {
        switch (action.type) {
           
           ......
     
            case LOGIN_OUT:
                return finance
                break;
            default:
                return state;
        }
    
    }
    //退出登录时处理逻辑
    export default connect(
        (state) => ({}),
        (dispatch) => ({
            loginOut: () => {
                dispatch(loginOut());
                Storage.remove({ key: 'user' });
                resetRouter('Login');
            }
        })
    )(...)
    //rn中后退2次逻辑处理
        onBackAndroid = () => {
            const routers = this.navigator._navigation.state.routes;
            if (routers.length > 1) {
                this.navigator.pop();
                return true;
            } else {
                if (this.lastBackPressed && this.lastBackPressed + 2000 >= Date.now()) {
                    Store.dispatch(loginOut());//redux重置
                    return false;
                }
                this.lastBackPressed = Date.now();
                ToastAndroid.show('再按一次退出应用', ToastAndroid.SHORT);
                return true;
            }
        };
    1 export const LOGIN_OUT = 'LOGIN_OUT';
    2 
    3 export const loginOut = () => {
    4     return {
    5         type: LOGIN_OUT
    6     }
    7 }
  • 相关阅读:
    自动化部署之jenkins及简介
    gitlab的备份与恢复与迁移
    P2561 [AHOI2002]黑白瓷砖
    P2042 [NOI2005]维护数列
    P2156 [SDOI2009]细胞探索
    P2154 [SDOI2009]虔诚的墓主人
    P2148 [SDOI2009]E&D
    2019.2.26考试T2 矩阵快速幂加速DP
    loj #6485. LJJ 学二项式定理 (模板qwq)
    P3224 [HNOI2012]永无乡
  • 原文地址:https://www.cnblogs.com/rion1234567/p/9559233.html
Copyright © 2011-2022 走看看