javascript - 为实用方法提供 Redux 存储

标签 javascript reactjs redux

我有一个 JS 设计问题,关于如何为非 React 组件的文件提供 redux 存储。我有一个典型的react-redux 应用程序。目前,我不是直接从 React 组件中调用 fetch,而是在一个名为 fetches.js 的集中式简单功能实用程序方法文件中进行所有服务调用。

const mainFetch(uri, onSuccess, options) {
    fetch(uri, options).then(response => {
        onSuccess(response);
    });
}

const export fetchDogs = (onSuccess) => {
    mainFetch('/dogs', onSuccess, { method: 'GET' });
}

const export fetchCats = (onSuccess) => {
    mainFetch('/cats', onSuccess, { method: 'GET' });
}

我意识到,对于我的应用程序来说,准确地了解我们当前正在等待哪些请求非常有用。所以我正在考虑将此信息添加到我的 redux 状态中,以便我可以将 mainFetch 更新为如下所示:

const mainFetch(uri, onSuccess, options, requestId) {
    store.dispatch({type: 'STARTED_REQUEST', request: requestId);

    fetch(uri, options).then(response => {
        store.dispatch({type: 'FINISHED_REQUEST', request: requestId);
        onSuccess(response);
    });
}

但是有一个问题,fetches.js 无法访问 redux 存储。我可以向 fetches.js 中的所有方法添加一个“store”参数,但我认为会有更好的 JS 设计模式。也许在 App.js 或其他东西中初始化一个类,类似于react-redux如何使用Provider和“connect”为所有子组件提供存储。我是 JS 新手,所以我想知道经验丰富的 JS 开发人员将如何解决这个问题。

最佳答案

这种设计缺乏一个中间件来处理 promise 。

基本思想是,当您分派(dispatch) Promise 时,从您“调用”这些“获取”函数的代码中,将会有一个中间件,它会分派(dispatch)所分派(dispatch)的操作并分派(dispatch)其他操作,例如“开始获取”和“获取结束”来标记异步流程。

redux 官方网站上的这个链接是一个好的开始 - https://redux.js.org/advanced/asyncflow

中间件 - https://github.com/pburtchaell/redux-promise-middleware

关于javascript - 为实用方法提供 Redux 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691361/

相关文章:

javascript - 告诉 PHP 后端浏览器已从前端 Angular 关闭

javascript - 从表行到详细信息的 AJAX 请求

javascript - 获取 e.target 父级的 onClick eventargs 并添加自定义数据以传播 onClick args

reactjs - redux-form getFormState 副作用

reactjs - 如何用redux组织 "sub-applications"?

reactjs - 我如何使用 Nextjs 将我的 URL 与应用程序状态同步

javascript - 如何使用 Javascript 将表单输入数据保存到 XML 文件?

javascript - 如何应用嵌套选择标签上的更改事件

javascript - Redux 会多次调度 action,即使它只在一个函数中调度一次

reactjs - React 的新上下文 api 与 enzyme