Flux行动创建者应该采取精细行动还是全面行动?

时间:2015-07-13 15:40:10

标签: javascript flux

前提

我正在重构一些Flux商店/操作/动作创建者更多Fluxy(PUBLISHPUBLISH_SUCCESSPUBLISH_FAILURE而不是奇怪的IS_LOADING操作),以及我想知道如何构建我的行动:我的行动创作者应该调用单个行动(PUBLISH_SUCCESS)还是多个行动(ADD_AUTHORADD_BOOK等)?

示例

这是一个更具体的例子:

我有一个TasksStore来保存我的创新的任务管理应用程序的待办事项,我有一个命名不佳的动作创建者TaskActions,它允许我从服务器获取我的变种并添加新的使用API​​。有点像这样:

const TasksStore = { ... };

const TaskActions = {
    fetchTasks(),
    addTask()
};

我应该调度哪些操作来与TasksStore通信?

我看到两个选项:action-creator-api特定的操作(FETCH_TASKSFETCH_TASKS_SUCCESSFETCH_TASKS_FAILUREADD_TASKADD_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) }
        );
    }
};

或介于两者之间?

谢谢!

1 个答案:

答案 0 :(得分:0)

我们决定选择更详细的路线:

对于AJAX操作(如示例中所示),我们会调度特定的“已启动”操作,然后执行“成功”或“失败”操作:

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

为什么?

  1. 这将动作创建者与动作创建者以调度动作的形式公开统一的,可移动的API的动作分离:ActionCreator.fetchMessages将发送FETCH_MESSAGES动作,而非ADDFETCH_OR_ADD或奇怪的东西。当没有意外的调度时,理解分离的系统(例如动作和存储(因为所有操作都通过调度程序而解耦))要容易得多。
  2. 这使得多个商店更容易收听动作创建者动作。我们MessageThreadsStore.fetchMessages()时是否需要更新.postMessage()?听取FETCH_MESSAGES_SUCCESS,而不是ADD,否则可能会被调用。
  3. 无论如何,希望有所帮助。