我正在重构一些Flux商店/操作/动作创建者更多Fluxy(PUBLISH
,PUBLISH_SUCCESS
,PUBLISH_FAILURE
而不是奇怪的IS_LOADING
操作),以及我想知道如何构建我的行动:我的行动创作者应该调用单个行动(PUBLISH_SUCCESS
)还是多个行动(ADD_AUTHOR
,ADD_BOOK
等)?
这是一个更具体的例子:
我有一个TasksStore
来保存我的创新的任务管理应用程序的待办事项,我有一个命名不佳的动作创建者TaskActions
,它允许我从服务器获取我的变种并添加新的使用API。有点像这样:
const TasksStore = { ... };
const TaskActions = {
fetchTasks(),
addTask()
};
我应该调度哪些操作来与TasksStore通信?
我看到两个选项:action-creator-api特定的操作(FETCH_TASKS
,FETCH_TASKS_SUCCESS
,FETCH_TASKS_FAILURE
,ADD_TASK
,ADD_TASK_SUCCESS
和& { {1}})或可重复使用的操作(ADD_TASK_FAILURE
一遍又一遍地调用fetch,并为ADD_TASK
调用一次。
基本上,我的API应该是这样的(每个action-creator-action的详细,可能冗余,可调度的操作):
addTask()
或者像这样(简明,可重复使用的可发送行动):
const TasksStore = {
on('FETCH_SUCCESS', (tasks) => { // add tasks });
on('ADD_SUCCESS', (task) => { // add task });
};
const TaskActions = {
fetchTasks() {
dispatch('FETCH');
myApi.fetchTasks(
(success_payload) => { dispatch('FETCH_SUCCESS', success_payload) },
(failure_payload) => { dispatch('FETCH_FAILURE', failure_payload) }
);
},
addTask() {
dispatch('ADD');
myApi.addTask(
(success_payload) => { dispatch('ADD_SUCCESS', success_payload) },
(failure_payload) => { dispatch('ADD_FAILURE', failure_payload) }
);
}
};
或介于两者之间?
谢谢!
答案 0 :(得分:0)
我们决定选择更详细的路线:
对于AJAX操作(如示例中所示),我们会调度特定的“已启动”操作,然后执行“成功”或“失败”操作:
dispatch('RETICULATE_SPLINES');
app.reticulateSpinesAndReturnPromise().then(
(success) => { dispatch('RETICULATE_SPLINES_SUCCESS'); },
(failure) => { dispatch('RETICULATE_SPLINES_FAILURE'); }
);
为什么?
ActionCreator.fetchMessages
将发送FETCH_MESSAGES
动作,而非ADD
或FETCH_OR_ADD
或奇怪的东西。当没有意外的调度时,理解分离的系统(例如动作和存储(因为所有操作都通过调度程序而解耦))要容易得多。MessageThreadsStore
但.fetchMessages()
时是否需要更新.postMessage()
?听取FETCH_MESSAGES_SUCCESS
,而不是ADD
,否则可能会被调用。无论如何,希望有所帮助。