Ema*_*mar 3 javascript reactjs redux-saga react-redux
README文件中的演示示例使用一个名为put()而不是dispatch()在worker saga中的函数.
...
// worker Saga: will be fired on USER_FETCH_REQUESTED actions
function* fetchUser(action) {
try {
const user = yield call(Api.fetchUser, action.payload.userId);
yield put({type: "USER_FETCH_SUCCEEDED", user: user});
} catch (e) {
yield put({type: "USER_FETCH_FAILED", message: e.message});
}
}
...
Run Code Online (Sandbox Code Playgroud)
Redux-Sagas基于发电机功能.每当你调用其中一个时,它就会被执行,直到达到一个yield.除了允许您通过等待承诺执行异步操作之外,这在例如测试方面具有许多优点.
从根本上说,模拟是你在测试时试图避免的.为此,遵循声明式方法.关键是你没有派遣(也没有真正做任何事),中间件就是这样.您只为此中间件提供名为Effects的对象.因此,put将做的是创建一个中间件将"读取"的Effect对象.然后,它将调度动作并使用next(result)(result由效果告诉中间件做的任何结果) 转到下一个产量并获得下一个效果.你可以在这里阅读更多相关信息.
请记住,与redux-thunk相比,redux-sagas的主要优点在测试时出现.能够声明每个put将返回哪个Effect,调用... 然后只是从yield迭代到yield而不是模拟API调用或调度是redux-sagas的一个主要卖点.在完全理解这个概念之前,您可能需要阅读和练习一点,但我希望我的解释能够解决您的疑问.
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |