当在componentDidMount

时间:2018-04-15 08:16:57

标签: reactjs redux react-redux redux-saga

我创建了一个saga,它会侦听“GET_CHARACTER”类型的动作,然后它会点击api并将数据发送到reducer。

我尝试在componentDidMount中调用动作创建者,动作发生(我可以在开发工具中看到它)但是saga没有被调用。

传奇工作肯定是正确的,因为我已经尝试通过在单击按钮时调用动作创建者来测试动作创建者,传奇运行并获取我的数据。

当我尝试在componentDidMount中调用action creator时,它不起作用。

这与Saga作为中间件有关吗?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,在我的情况下,这是由于我的根传说中的yield call(...other thing)被阻塞了,在之前,代码设置为监听{{1} },因此它的执行顺序如下:(1)在根​​传奇中,其他事物开始运行(2)在componentDidMount中,本应触发我的另一个传奇的动作只有在另一个传奇之后才被调度(3)事情完成了,其余的传奇故事都运行了,并为应该由componentDidMount的操作触发的操作注册了侦听器,但是到现在为时已晚,sagas无法开始操作在他们注册执行该操作之前触发。

希望有道理...

以下是相关代码:

componentDidMount

...然后在sagas中

componentDidMount() {
  this.props.doStuffThatTriggerMySaga();
}

解决方案是重构代码,以消除“阻塞” function* mySaga(action) { // ... } function* rootSaga() { yield call(doOtherStuff); // this was the problem // ... yield takeEvery(ACTION_TRIGGERING_MY_SAGA, mySaga) } 调用,并使其他内容也由某个操作触发运行,例如使用yield call(doOtherStuff);并找出其位置您触发该操作很有意义。