【问题标题】:How to access the redux store from a library?如何从库访问 redux 商店?
【发布时间】:2016-07-14 09:26:53
【问题描述】:

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

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

或者我也可以创建一个initialize() 方法,将调度传递给库。

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());
        ));
    };
};

我还没有尝试过这段代码,现在更像是一次头脑风暴。

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

谢谢!

【问题讨论】:

  • 您是否考虑过将其作为中间件?
  • 我想过这个,但我不知道如何使用中间件来做到这一点,一个例子会很棒!

标签: javascript reactjs react-native redux


【解决方案1】:

我的冲动是交换参数:

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);

【讨论】:

  • 我终于做了类似的事情,谢谢! :)
猜你喜欢
  • 2020-04-22
  • 2019-06-22
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 2021-10-18
  • 1970-01-01
相关资源
最近更新 更多