如何在Redux中使用规范化状态?

时间:2017-04-25 14:55:31

标签: redux normalizr

我需要帮助设计一个简单的应用程序,允许用户使用表单对视频进行评级。我的状态由2个减速器组成,一个用于保存所有可录制视频的数据(以标准化方式),另一个用于保存表单状态:

{
  videos: {
    'video1Id': { id: 'video1Id', title: 'Cat video', duration: 120, ... },
    'video2Id': { ... },
    ...
  },
  rateForm: {
    'videoId': 'video1Id'
    'userComment: 'A nice video about cat'
    'formSubmitted': false
    ...
  }
}

请注意,在rateForm里面,我引用视频ID而不是视频对象。问题是,如何从我的rateForm reducer中检索整个视频对象?

我觉得我正在遵循Redux设计的最佳实践,但我坚持使用这个非常简单的用例。任何帮助表示赞赏。

由于

1 个答案:

答案 0 :(得分:1)

有一点需要记住,减速机应该简单易行。仅在reducer级别上执行原子操作。从我可以告诉你试图在你的reducer中检索整个视频对象听起来不对。

根据您的需要,通常情况下,如果您只想对其进行评论或评分,则无需获取整个视频对象。但是,如果你100%确定你必须这样做,那么你的行动就是一个好地方。使用Redux-Thunk,您可以在返回thunk之前访问整个状态对象。实施例

function doSomethingToVideo (videoId, something) {
  return (dispatch, getState) => {
    const video = getState().videos[videoId]
    // Do what ever 
    return somethingElse
  }
}

参考:Redux作者对类似问题的回答。

Accessing Redux state in an action creator?