我们说我得到了
IClientState: {
firstName: string,
lastName: string,
details: IClientDetailsState
}
并且让我们进一步假设从服务中检索firstName
和lastName
是便宜的,因此一个操作会将一个fel扫描中的所有客户端加载到父状态
xxxxState: {
clients: IClientState[],
...
}
但是,为任何一个客户端检索details
都非常昂贵,例如,在列表中显示它们并不是完全需要的。
我该如何解决这个问题?我正考虑将loading
和loaded
属性添加到IClientDetailsState
并检查需要此数据的组件中的属性;如果两个属性都应该产生false
,那么该组件将触发动作加载细节。
问题是,从组件的角度来看,这个检查相当复杂,对我而言,这是一个警告信号,表明不应该这样做。
所以是的,我该如何以正确的方式处理这个问题?
答案 0 :(得分:1)
我不认为问题与redux有关,相反我认为你需要重新思考你的状态。
我会通过引入一些新类型来解决问题,例如:
IClientBase: {
firstName: string,
lastName: string
}
IClientListItem extends IClientBase: {
index: integer
}
IClientList{
items: IClientListItem[]
}
IClient extends IClientBase{
details: IClientDetails
}
现在,您可以收集便宜IClientListItem
的列表,当用户选择某个项目时,您可以将其转换为IClient
并使用相应的客户详细信息进行充气。