如何调用redux saga生成器函数?

时间:2019-03-04 10:32:14

标签: reactjs redux redux-saga

也许我错过了重点或sagas的工作方式,但我不确定如何执行以下操作

export default function* (){
   yield all([
     takeLatest(TOGGLE_MODAL, toggleModal)
   ]);
}

我有这个“初始”功能,在这里我称之为其他功能。 我调用的函数之一是生成器函数,它可以正常工作

function* myOtherFunction(){

}

说我想在代码的其他地方调用此函数,我该怎么做? 我想在动作创建者内部调用它

(当我在其中使用yield时,它会成为生成器)

1 个答案:

答案 0 :(得分:0)

您不会直接致电Sagas。 您可以通过操作创建者创建操作,然后将其分发到商店。 您将sagas注册到商店的saga中间件中,以便每次收到特定操作时就会调用它们。

假设您有一个动作CALL_OTHER_FUNCTION和相应的动作创建者callOtherFunction()。您可以将其分派到某个地方,例如,在带有mapDispatchToProps的组件中:

const mapDispatchToProps = dispatch => {
    return {
        callOtherFn: () => dispatch(callOtherFunction())
    };

};

在您的传奇故事中,您现在只需要使用take()takeAll()takeLatest()或其他适合您需要的effect creator收听此操作。

export default function* (){
   yield all([
     takeLatest(TOGGLE_MODAL, toggleModal),
     takeLatest(CALL_OTHER_FUNCTION, myOtherFunction]);
}

此后,您调度到商店的每个操作都会调用myOtherFunction生成器。