是否应为出版物列表与单个出版物使用独立的Redux reducer?
关于Redux是否需要第二个reducer处理单个出版物操作的解答
核心判断依据:状态的共享范围
先对应你看到的文档规则:
在React + Redux应用中,全局状态应存入Redux store,局部状态应保留在React组件中。
判断要不要用Redux(以及是否单独拆分reducer),核心看这个出版物的状态是否需要在多个组件中共享:
如果该出版物的信息(比如详情内容、点赞状态)需要在多个组件里展示或修改(比如列表页显示点赞状态、详情页操作点赞、个人主页统计点赞数),那必须把状态放进Redux store。至于是否单独用第二个reducer,看逻辑复杂度:
- 如果出版物相关的操作(获取详情、点赞、评论、收藏)逻辑较多,单独拆分一个
publicationReducer会让代码结构更清晰,后续维护更方便,用combineReducers把它和其他reducer合并即可。 - 如果逻辑简单(只有获取和点赞),也可以把相关状态和操作合并到现有的内容类reducer(比如
postsReducer)里,只要状态结构分层清晰就行。
举个单独reducer的示例:
// publicationReducer.js const initialState = { currentItem: null, isLiked: false, loading: false }; export default function publicationReducer(state = initialState, action) { switch (action.type) { case 'PUBLICATION/FETCH_REQUEST': return { ...state, loading: true }; case 'PUBLICATION/FETCH_SUCCESS': return { ...state, loading: false, currentItem: action.payload, isLiked: action.payload.userHasLiked }; case 'PUBLICATION/TOGGLE_LIKE': return { ...state, isLiked: !state.isLiked }; default: return state; } }- 如果出版物相关的操作(获取详情、点赞、评论、收藏)逻辑较多,单独拆分一个
如果这个出版物的状态只在单个组件(比如独立的详情页组件)内使用,其他组件完全不需要访问或修改它,那直接用React的局部状态(
useState或组件内的useReducer)就够了,没必要放到Redux里,避免过度设计增加冗余。
总结
不是必须要第二个reducer,关键先确定状态的共享范围:需要全局共享就放进Redux,再根据逻辑复杂度决定是否拆分reducer;仅局部使用就留在组件内。
内容的提问来源于stack exchange,提问作者midjiro
相关产品推荐
相关产品推荐

