Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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 流量动作创建者应该分派粒度动作还是清扫动作? 前提_Javascript_Flux - Fatal编程技术网

Javascript 流量动作创建者应该分派粒度动作还是清扫动作? 前提

Javascript 流量动作创建者应该分派粒度动作还是清扫动作? 前提,javascript,flux,Javascript,Flux,我正在重构一些流量存储/动作/动作创建者,使其更加流畅(PUBLISH,PUBLISH\u SUCCESS,PUBLISH\u FAILURE),而不是奇怪的IS\u LOADING动作),我想知道如何构造我的动作:我的动作创建者是否应该调用单个动作(PUBLISH\u SUCCESS)或者多个(ADD\u AUTHOR,ADD\u BOOK,等等) 榜样 这里有一个更具体的例子: 我有一个TasksStore,它为我创新的新任务管理应用程序保存todo项,我还有一个名字不太好的action c

我正在重构一些流量存储/动作/动作创建者,使其更加流畅(
PUBLISH
PUBLISH\u SUCCESS
PUBLISH\u FAILURE
),而不是奇怪的
IS\u LOADING
动作),我想知道如何构造我的动作:我的动作创建者是否应该调用单个动作(
PUBLISH\u SUCCESS
)或者多个(
ADD\u AUTHOR
ADD\u BOOK
,等等)

榜样 这里有一个更具体的例子:

我有一个
TasksStore
,它为我创新的新任务管理应用程序保存todo项,我还有一个名字不太好的action creator
TaskActions
,它让我可以从服务器获取我的变体,并使用API添加新的变体。有点像这样:

const TasksStore={…};
常量任务操作={
fetchTasks(),
addTask()
};
我应该调度哪些操作来与TaskStore通信

我看到两个选项:action creator api特定的操作(
获取任务
获取任务
获取任务失败
添加任务
添加任务成功
,&
添加任务失败
)或可重用操作(
添加任务
多次调用以获取,并为
添加任务()调用一次)

基本上,我的API应该是这样的(对于每个action creator操作,可能是冗余的、可分派的操作):

const TasksStore={
on('FETCH_SUCCESS',(tasks)=>{//addtasks});
on('ADD_SUCCESS',(task)=>{//ADD task});
};
常量任务操作={
fetchTasks(){
发送(“提取”);
myApi.fetchTasks(
(成功负载)=>{dispatch('FETCH_success',success_payload)},
(failure\u payload)=>{dispatch('FETCH\u failure',failure\u payload)}
);
},
addTask(){
发送(“添加”);
myApi.addTask(
(成功负载)=>{dispatch('ADD_success',success_payload)},
(failure\u payload)=>{dispatch('ADD\u failure',failure\u payload)}
);
}
};
或者像这样(简洁、可重用、可分派的操作):

const TasksStore={
on('ADD',(task)=>{//addtask});
};
常量任务操作={
fetchTasks(){
发送(“提取”);
myApi.fetchTasks(
(成功负载)=>{
success_payload.forEach((任务)=>{dispatch('ADD',task);})
},
(failure_payload)=>{dispatch('FETCH_failure',failure_payload)
);
},
addTask(){
发送(“添加”);
myApi.addTask(
(成功负载)=>{dispatch('ADD',成功负载),
(failure\u payload)=>{dispatch('ADD\u failure',failure\u payload)
);
}
};
还是介于两者之间


谢谢!

我们决定采用更详细的路线:

对于AJAX操作(如示例中所示),我们发送一个特定的“已启动”操作,然后发送一个“成功”或“失败”操作:

为什么?

  • 这将使动作创建者与动作稍微分离—动作创建者以调度动作的形式公开了一个统一的、可扩展的API:
    ActionCreator。fetchMessages
    将调度一个
    FETCH\u MESSAGES
    动作,而不是
    ADD
    FETCH\u或
    或其他奇怪的动作。理解分离要容易得多d当没有意外调度时,类似系统的操作和存储(由于所有操作都通过调度器传输而解耦)
  • 它使多个存储区更容易侦听action creator操作。
    MessageThreadsStore
    是否需要在我们
    时更新。fetchMessages()
    而不是
    。postMessage()
    ?侦听
    FETCH\u MESSAGES\u SUCCESS
    ,而不是
    ADD
    ,否则这两个存储区都可能会被调用
  • 不管怎样,希望这有帮助

    dispatch('RETICULATE_SPLINES');
    app.reticulateSpinesAndReturnPromise().then(
        (success) => { dispatch('RETICULATE_SPLINES_SUCCESS'); },
        (failure) => { dispatch('RETICULATE_SPLINES_FAILURE'); }
    );