Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从saga获取action.params_Javascript_Redux_State_Redux Saga - Fatal编程技术网

Javascript 如何从saga获取action.params

Javascript 如何从saga获取action.params,javascript,redux,state,redux-saga,Javascript,Redux,State,Redux Saga,我正在使用redux saga。在代码中,yield*ReduxSaga.takeEvery('MY_ACTION',updateport)如何访问操作以获取其字段 例如,我有一个动作创建者: function status(){ type: 'MY_ACTION', status: true } 如何从我的传奇中访问action.status?或者我必须只通过getState()和访问数据吗 你也可以这样做。redux saga文档很好地解释了这些优点: 使用take对我们如何编

我正在使用
redux saga
。在代码中,
yield*ReduxSaga.takeEvery('MY_ACTION',updateport)如何访问
操作
以获取其字段

例如,我有一个动作创建者:

function status(){
  type: 'MY_ACTION',
  status: true
} 
如何从我的传奇中访问
action.status
?或者我必须只通过
getState()
和访问数据吗

你也可以这样做。redux saga文档很好地解释了这些优点:

使用take对我们如何编写代码有着微妙的影响。在takeEvery的情况下,调用的任务无法控制何时调用它们。每次匹配操作都会反复调用它们。他们也无法控制何时停止观察

在采取控制措施的情况下,控制权倒置。而不是行动 这部传奇故事被推到了处理者的任务上,它通过 它本身看起来这部传奇正在执行一个正常的函数调用 action=getNextAction(),该函数将在执行操作时解析 派遣


请在此处阅读更多内容:

通常,您可能有一个根saga或索引saga,其中您可以有一个init生成器,其yield all如下所示:

//in your action creator
const actionCreator = () => ({
    type: 'MY_ACTION1',
    status: true
});
//in your saga file, you will receive 'action' and then you can destructure it to status if you want.
function* updateDataForAction1({ status }) {
    //use value of status 
}
//in your root saga file
export function* watchInit() {
    yield all([
        takeEvery('MY_ACTION1', updateDataForAction1),
        takeEvery('MY_ACTION2', updateDataForAction2),
        takeEvery('MY_ACTION3', updateDataForAction3),
    ]);
}

你太棒了。它起作用了。你可以发布一个文档链接吗。我本来可以找到的,为我工作。棒极了,伙计!
const actionCreator = () => ({
  type: 'MY_ACTION',
  status: true
})

function* updatePorts() {
  while (true) {
      const { status } = take('MY_ACTION');
      // ...
  }

}
//in your action creator
const actionCreator = () => ({
    type: 'MY_ACTION1',
    status: true
});
//in your saga file, you will receive 'action' and then you can destructure it to status if you want.
function* updateDataForAction1({ status }) {
    //use value of status 
}
//in your root saga file
export function* watchInit() {
    yield all([
        takeEvery('MY_ACTION1', updateDataForAction1),
        takeEvery('MY_ACTION2', updateDataForAction2),
        takeEvery('MY_ACTION3', updateDataForAction3),
    ]);
}