我是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 :)