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 creatorTaskActions
,它让我可以从服务器获取我的变体,并使用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操作(如示例中所示),我们发送一个特定的“已启动”操作,然后发送一个“成功”或“失败”操作: 为什么?
ActionCreator。fetchMessages
将调度一个FETCH\u MESSAGES
动作,而不是ADD
或FETCH\u或
或其他奇怪的动作。理解分离要容易得多d当没有意外调度时,类似系统的操作和存储(由于所有操作都通过调度器传输而解耦)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'); }
);