Gab*_*MSC 8 javascript react-redux
我正在关注pluralsight 上的教程,这是一个全栈react/redux 教程,并且我正在使用以下代码创建一个saga.mock.js 文件。
这是我不熟悉的东西,希望得到解释,以便我能理解这一点。
import { take, put, select } from 'redux-saga/effects';
import * as mutations from './mutations';
import uuid from 'uuid';
export default function* taskCreationSaga(){
while (true) {
const {groupID} = yield take(mutations.REQUEST_TASK_CREATION);
console.log("Got group ID", groupID);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我商店的 index.js 中,我在星号**中添加了底部代码
import { createStore, applyMiddleware } from 'redux';
import { defaultState } from '../../server/defaultState';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';
const sagaMiddleware = createSagaMiddleware();
import * as sagas from './sagas.mock'
export const store = createStore(
function reducer(state = defaultState, action) {
return state;
},
**applyMiddleware(createLogger(), sagaMiddleware)
);
for (let saga in sagas) {
sagaMiddleware.run();
}**
Run Code Online (Sandbox Code Playgroud)
并收到以下错误,“在检查 runSaga(storeInterface, saga, ...args) 时未捕获:saga 参数必须是生成器函数!”
我通过改变这个解决了这个问题:
for (let saga in sagas) {
sagaMiddleware.run();
}
Run Code Online (Sandbox Code Playgroud)
对此:
for (let saga in sagas) {
sagaMiddleware.run(sagas[saga]);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
该文档要求您为 run() 方法提供一个生成器函数,因此您只需传递默认生成器taskCreationSaga并从 sagas.mock.js 文件导入它即可
import { taskCreationSaga } from './sagas.mock';
for (let saga in sagas) {
sagaMiddleware.run(taskCreationSaga)
}
Run Code Online (Sandbox Code Playgroud)
这应该适合您并允许您继续学习课程。
run() 方法应该接收一个 sagas 数组(每个 saga 都是一个生成器函数),每个数组返回一个生成器对象。这样,中间件可以通过调用每个传奇的下一个传奇来处理异步过程,以遵循有序的操作序列,这也可能启动其他传奇。
我也在寻找对此的解释,并在redux-saga 文档中找到了它:(这是更详细地解释 run() 用法的部分)
在第一次迭代中,中间件调用 next() 方法来检索下一个 Effect。然后,中间件按照下面的效果 API 的指定执行生成的效果。同时,生成器将暂停,直到效果执行终止。收到执行结果后,中间件调用生成器上的 next(result),将检索到的结果作为参数传递给它。重复此过程,直到生成器正常终止或抛出一些错误。
如果执行导致错误(由每个 Effect 创建者指定),则调用 Generator 的 throw(error) 方法。如果 Generator 函数定义了围绕当前yield 指令的 try/catch,则底层 Generator 运行时将调用 catch 块。运行时还将调用任何相应的finally 块。
在这种情况下,Saga 被取消(手动或使用提供的 Effects),中间件将调用 Generator 的 return() 方法。这将导致生成器直接跳到finally块。
| 归档时间: |
|
| 查看次数: |
6191 次 |
| 最近记录: |