从一个从不同的 reducer 文件订阅的动作文件调度动作是一种反模式吗?

Is it an anti pattern to dispatch actions from an action file that are subscribed to from a different reducer file?

通常在我的 Redux 项目中,我有成对出现的 action 和 reducer 文件。因此,在我的 actions 文件夹中,我将有一个 posts.js,在我的 reducers 文件夹中,我也将有一个 posts.js。 posts 动作文件通常只是调度在 posts reducer 文件中订阅的动作类型。

但现在我需要从 authors reducer 文件订阅的 posts 动作文件中分派一个动作类型。这可以吗还是被认为是反模式?

这取决于您遵循的设计模式。 因为您可能将所有操作都放在一个文件中。 对于您的情况,您可以从一个文件中导出动作创建者,然后将其导入您想要相同动作创建者的位置。 通过这种方式,您可以在 action creators 和 reducers 之间进行与您所说的相同的同步。

那根本不是 anti-pattern。它很好 code-reusability,对 error-handling 尤其有用。

考虑以下示例:

posts.js

import { GET_POSTS } from "./actions/types"
import { setErrors } from "./actions/errors"
import axios from "axios"

export const getPosts = () => {
   return (dispatch) => {
       axios.get("/api/posts")
            .then((res) => {
                dispatch({
                   type: GET_POSTS,
                   payload: res.data
                })
            })
            .catch((errors) => {
                dispatch(setErrors(errors.response.data))
            }
   }
}

errors.js

const setErrors = (errors) => {
   return {
      type: SET_ERRORS,
      payload: errors
   }
}

因此,与其在 posts.js 中定义全新的 post-related errors 操作,不如将只需导入订阅您的 errors-reducer(如果有)的现有订阅。将您的 authorpost 操作一起使用也是如此。