You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否应为出版物列表与单个出版物使用独立的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:08:17