【问题标题】:Redux_Saga. How to past the function as an argument to the nested Generator?Redux_Saga。如何将函数作为参数传递给嵌套生成器?
【发布时间】:2023-03-14 23:55:01
【问题描述】:

所以,我想将一些函数setupSocket 作为参数推送到嵌套生成器createSaga 中执行,但现在我不明白我该怎么做?

在父生成器mySaga内部setupSocket正常显示,但在createSaga内部不行...

import { takeEvery, put, call, take } from 'redux-saga/effects'; 
import { delay } from 'redux-saga';
import { addMessage, addUser } from '../actions'
import * as constants from '../constants'

function* createSaga(action, setupSocket) {
    try {
        console.log(setupSocket); // not good
        yield put(addMessage(action.message, action.author, action.photo));
        yield put(addUser(action.author, action.photo));
    } catch (e) { 
        console.log(e) 
    }
};

function* mySaga(setupSocket) {
    console.log(setupSocket); // all good
    yield takeEvery(constants.ADD_DATA, createSaga);
};

export default mySaga;

【问题讨论】:

    标签: javascript generator redux-saga


    【解决方案1】:

    您可以将额外的参数传递给takeEvery,这些参数将被传递给 saga。

    function* createSaga(setupSocket, action) {
        console.log(setupSocket); // should now be good
        ...
    };
    
    function* mySaga(setupSocket) {
        yield takeEvery(constants.ADD_DATA, createSaga, setupSocket);
    };
    

    如果您传递一些参数,action 将始终是最后一个参数,因此我不得不在 createSaga saga 参数中交换 actionsetupSaga 的顺序。

    https://redux-saga.js.org/docs/api/#takeeverypattern-saga-args

    【讨论】:

    • 无效.. 在您的情况下,setupSocket 扮演action 的角色并显示其中的所有值。至于action - 在这种情况下它是未定义的
    • 您是否将setupSocket 作为takeEvery 的第三个参数传递?
    • @MaxWolfen 你一定是错过了什么,在这里查看工作示例:codesandbox.io/s/zzm67lw5l(你需要在底部打开控制台面板)
    猜你喜欢
    • 2017-05-03
    • 2019-10-05
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多