从一个从不同的 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(如果有)的现有订阅。将您的 author 和 post 操作一起使用也是如此。
通常在我的 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(如果有)的现有订阅。将您的 author 和 post 操作一起使用也是如此。