2017-06-09 38 views
0

我正在研究我的第一个React/Redux应用程序,现在我已经达到了第一个不重要的问题。将异步结果与React和Redux结合使用

使用默认参数在页面加载时从服务器异步加载应用程序数据(相当多)。然后在客户端进一步过滤。用户可以更改初始数据加载和过滤器的参数。

我可能会遇到的一个问题是,如果用户在返回参数之前切换参数,则会从初始数据加载返回过期数据。另一个是用惯用的Redux方式管理事件链。

我敢肯定我可以手动取消以前的回调,但我真的正在寻找一个更强制性的方法。

我通常会使用RX来解决这类问题。这在这里是明智的吗?在这种情况下,我的RX代码应该放在哪里?

感谢您的建议

回答

0

我发现了一个名为Redux-Observable,的库,它允许您将Redux事件视为事件流,并执行复杂的异步操作。它完美符合法案。

This video让我开始了

1

最可靠的解决方案至今redux-saga库的使用。它在表现力方面照顾副作用,易于测试declarative way(不是rxjs解决方案)。

在你的情况需要使用takeLatest()效果,这可以确保只有最新的请求被处理:

import { takeLatest } from 'redux-saga/effects' 

function* watchFetchData() { 
    yield takeLatest('FETCH_REQUESTED', fetchData) 
} 

export function* fetchData(action) { 
    try { 
     const data = yield call(Api.fetchUser, action.payload.url) 
     yield put({type: "FETCH_SUCCEEDED", data}) 
    } catch (error) { 
     yield put({type: "FETCH_FAILED", error}) 
    } 
} 

'FETCH_REQUESTED'是从动作的创造者发出的动作类型。 takeLatest()确保只处理最新的操作,并且仅从最新的获取请求中获得结果。

如果您使用类似axios的提取库,您可以使用force the cancellation的不必要的ajax请求。

关于saga helpers的更多细节。

+0

感谢您的回答。我评估了红色传奇,也反应了可观察,并决定与后者一起前往 –