redux标准化状态分页刷新

时间:2018-11-16 09:09:56

标签: reactjs redux normalizr

我是redux的新手,我正努力避免与规范化状态混淆。

我有两个页面:帖子和用户。每个页面都具有无限滚动,刷新和粗体操作之类的功能。

我已经开发了具有所需功能的api。

我正在建立这样的状态形状

{
    entities: {
        posts: {
            "1": {
                id: 1,
                idUser: 1,
                title: "Good day"
                image: "/images/goodday.png"
            },
            "2" : {
                id: 2,
                idUser: 1,
                title: "Nice breakfast!",
                image: "/images/breakfast.png"
            }
        },
        postComments: {
            "5": { 
                id: 5, 
                idUser : 2, 
                idPost: 1, 
                comment: "Nice!" 
            }
        },
        users: {
            "1": { id: 1, name: "Richard" },
            "2": { id: 2, name: "Marco" }
        }
   }
   paginator: {
       posts: {
           page: 1,
           loading:false,
           refreshing: false,
           error: ''
       },
       users: {
           page: 1,
           loading:false,
           refreshing: false,
           error: ''
       }
   }
}

问题是:

1


假设第一页是关于帖子的,我在componentDidMount中获取帖子。

我将发现自己处于一种我所描述的状态,其中entities.users已经被用户1填充,因为我获取的帖子来自ID为1的用户。

下一步,我导航到显示用户的页面。因此,在componentDidMount中,我正在获取用户。

可能是从获取api之后,我将再次下载ID为1的用户。

我总是借助loadash库将状态为newState = merge({}, state, entities);的结果合并。

这是正确的吗?在大型应用程序中,这需要合并商店中已经存在的许多元素。

2


当有人要求刷新时,假设用户页面刷新,我将用其初始状态重新初始化相对分页器,并清除实体状态的entities.users部分。

然后,一旦获取了api,我就用新结果填充entities.users

现在,如果我返回到帖子页面,则可能发生的情况是,帖子中不再有相对用户出现在商店中。

哪种是进行此类刷新操作的正确方法?

谢谢,抱歉英语不好:)

0 个答案:

没有答案