我正在为我的react应用程序创建一个库,该库将处理与 session 相关的每个API调用(身份验证,注册,刷新 token 等...),并且该库将需要自行访问redux存储以调度操作。
这背后的原因是,每当用户的访问 token 到期时,我都需要使用setTimeout调用操作创建者,该创建者将调用我的API刷新 token ,并使用新的 session 数据更新应用程序Redux存储。

因此,我想在第一次调用该方法时将调度方法传递给该库,但是我不确定这是最好的方法。

或者,我也可以创建一个initialize()方法,该方法会将分派(dispatch)传递给库。

import { authenticate } from 'libraries/session';

export function login(email, password) {
    return (dispatch) => {
        dispatch(loginRequest());

        return authenticate(email, password, dispatch) // dispatch is passed here, so I can use it later in the library
        .then(() => (
            dispatch(loginSuccess())
        ))
        .catch((json) => (
            dispatch(loginError());
        ));
    };
};

我还没有尝试过这段代码,现在更多的是头脑 Storm 。

您对处理此问题的最佳方法有何建议?

谢谢!

最佳答案

我的冲动就是交换参数:

import { authenticate } from 'libraries/session';


export function configureLogin(store) {
    var {dispatch, subscribe, getState} = store;
    return (email, password) => {
        dispatch(loginRequest());

        return authenticate(email, password, dispatch) // <- I don't why dispatch needs to be included, but I'll take ur word for it
        .then(() => dispatch(loginSuccess())
        .catch(json => dispatch(loginError()));
    };
};

// usage
import { configureLogin } from './service/login';
var store = createStore();
var login = configureLogin(store);
login(email, password);

08-17 22:45