Redux 如何让《守望者传奇》在动作模式的第一次发布中就成为工人传奇?

Redux 如何让《守望者传奇》在动作模式的第一次发布中就成为工人传奇?,redux,redux-saga,react-redux-i18n,Redux,Redux Saga,React Redux I18n,如何让《守望者传奇》在动作模式的第一次发布中就成为工人传奇 function* rootSaga() { yield takeEvery(CHATBOT.START, handleChatbotLoad); //I want watcher saga to trigger handleChatbotLoad only on the very first dispatch of CHATBOT.START yield takeEvery(CONVERSATION.ADD_QUERY

如何让《守望者传奇》在动作模式的第一次发布中就成为工人传奇

function* rootSaga() {
    yield takeEvery(CHATBOT.START, handleChatbotLoad); //I want watcher saga to trigger handleChatbotLoad only on the very first dispatch of CHATBOT.START
    yield takeEvery(CONVERSATION.ADD_QUERY, handleUserInput);
}
是的,我希望watcher saga只在第一次发送CHATBOT.START时触发handleChatbotLoad。我可以在状态中设置一个标志,如
started
和dispatch CHATBOT.START仅一次。 但后来我期待着一种类似于
takeFirst
之类的方法。有没有这样的方法来实现这一点?

您可以(或者,)在根传奇中使用一些函数,这意味着在应用程序启动时只调用一次。并在此函数中使用以等待已调度的操作:

function* onlyVeryFirstStartWatcher() {
    const action = yield take(CHATBOT.START);
    // started, do stuff...
    yield call(handleChatbotLoad);
}

function* rootSaga() {
  yield takeEvery(CONVERSATION.ADD_QUERY, handleUserInput);
  yield call(onlyVeryFirstStartWatcher)
}

我不想在应用程序启动时调用handleChatbotLoad。我希望仅在第一次发送CHATBOT.START时调用handleChatbotLoad。我尝试了你上面提到的,
function*chatbotStartWatcher(){yield take(CHATBOT.START,handleChatbotLoad)}function*rootSaga(){yield takeEvery(CONVERSATION.ADD_QUERY,handleUserInput);yield call(chatbotStartWatcher);}导出默认rootSaga
但是
handleChatbotLoad
CHATBOT上的每次调度上都被调用。START
@PraveenDass无需将
handleChatbotLoad
作为
take
的第二个参数传递。以后再打吧。我更新了答案。