2

在过去的两周里,我一直在使用 redux,我遇到了一个问题,我想访问/更改另一个 reducer 的状态值。我怎样才能做到这一点?

例如:我有两个组件' A-Component '和' Message-component '分别有' A-actions '、' Message-actions '和' A-reducer '、' Message-reducer '

当调用' A-Component '的动作时,它将调用相应的reducer函数,我需要更新Message-reducer状态值,该值将显示消息框

A-动作

    导出函数添加(数据){
      返回 {
        类型:[types.ONADD,types.ONADDSUCCESS,types.ONADDFAIL],
        有效载荷:{
          响应:api.add(data).then(response => response),
          数据
        }
      };
    }

A-减速机

    导出默认 createReducer(initialState, {
      [types.ONADD](状态){
        返回 {
          ...状态,
          消息:'更新记录'
        };
      }
     });

上面提到的消息状态值是消息reducer的状态值。我想从 A-reducer 更新消息状态值,从而更新消息组件。这在redux中可能吗?

我尝试了各种中间件,但失败了。

预先感谢!

4

2 回答 2

2

我认为您以错误的方式处理此问题。您应该尽可能地规范化您的数据,然后可能使用连接装饰器来组成您的 UI 所需的状态。例如,消息可以嵌套在“朋友”的节点下,但最好将它们放在自己的存储中,然后创建一个函数,根据关系从朋友那里选择消息。这为您免费提供聚合(您有 3 条未读消息)。看看reselect以一种很好的(和缓存的)方式来做到这一点。

编辑:

您可以编写调度多个操作的中间件:

export default (store) => (next) => (action) => {
   if(!action.types){
     return next(action);
   }

   action.types.forEach(type => {
     next({
       type,
       payload: action.payload
     })
   });
}

然后像这样从 Action Creator 调用它:

export function addMessage(message){
  return {
    types: ['ADD_MESSAGE', 'UPDATE_USER'],
    payload: message
  }
}
于 2015-10-05T12:56:46.507 回答
1

如果您在 Message-actions 中已有更新操作

我认为您可以在触发 ONADDSUCCESS 时直接调度更新操作。

// Message action
export function MessageUpdate (data) {
  return {
    type: ...,
    data,
  }
}
// A action
export function add(data) {
  return dispatch => {
    dispatch({
      type: types.ONADD
    });

    // code for your add event
    api.add(data).then( response => {
      (() => {
        dispatch(MessageUpdate(response));
        return dispatch({
          type: types.ONADDSUCCESS,
        })
      })()
    });
  }
}

希望这能回答你的问题。

于 2016-07-14T08:10:15.347 回答