Считается ли это раздуванием кода, если у вас есть несколько диспетчеров в одном создателе действий?

У меня есть список создателей CRUD async action. Моя цель состоит в том, чтобы обновить магазин, но, кроме того, я хотел бы сделать такие вещи, как перенаправить страницу на успешный почтовый запрос и/или предоставить флэш-сообщения. Вот пример:

import axios from 'axios';
import { push } from 'react-router-redux';
import { addFlashMessage } from '../actions/flash_message_actions';
import { POSTS_URL, POSTS_ENDPOINT } from '../constants/index';

export function deletePost(id) {
  return function (dispatch, getState) {
    dispatch({
      type: DELETE_POST,
    });

    return axios.delete(`${POSTS_URL}/${id}`).then(
      response => {
        dispatch({
          type: DELETE_POST_SUCCESS,
          response,
        });

        dispatch(
          push(POSTS_ENDPOINT)
        );

        dispatch(
          addFlashMessage('Post Deleted')
        );
      },
      error => dispatch({
        type: DELETE_POST_FAILURE,
        error,
      })
    );
  };
}

Обратите внимание на три диспетчера выше. Все они имеют определенную цель, но немного колебались, чтобы добавить так много. Основываясь на примерах, которые я видел в интернете, создатели действий обычно тонкие с одним диспетчером.

Кроме того, считается хорошей практикой отправлять действие из совершенно другого шаблона создателя действия? Образец:

import { addFlashMessage } from '../actions/flash_message_actions';
...
dispatch(
  addFlashMessage('Post Deleted')
);

2 ответа

  1. Я думаю, что жизнь стала бы легче, если бы вы реализовали redux actor так, чтобы вам не приходилось отправлять действия один за другим.

    Redux actor принимает два состояния аргумента и функцию отправки, и как только действие запускается, то все действия внутри актера получают триггер в то время, когда вам не нужно отправлять действие по одному.

    см.: http://jamesknelson.com/join-the-dark-side-of-the-flux-responding-to-actions-with-actors/