我是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
。
现在,如果我返回到帖子页面,则可能发生的情况是,帖子中不再有相对用户出现在商店中。
哪种是进行此类刷新操作的正确方法?
谢谢,抱歉英语不好:)