我是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 .

现在,如果我回到帖子页面,可能会发生帖子不再存在商店中的相对用户 .

进行这种刷新操作的正确方法是什么?

Thanks, and sorry for bad English :)