0
我有一个名为PartyDetails
的组件,它需要通过ajax调用获取数据。我想在ajax请求正在进行时显示Loading
组件。有没有更好的方法来处理这个redux重构分支用例?
问题是,为了确定数据是否加载,我需要访问商店。这就是我的增强看起来像:
const enhance = compose(
propSetter,
lifecycleEnhancer,
loading,
)
export default enhance(PartyDetails)
其中propSetter
是:
const propSetter = connect((state) => {
const { party } = state
const { dataLoaded } = party
// for some reason state does not contain match, and I'm resorting to routing
const { routing: {location: { pathname }}} = state
const involvedPartyId = pathname.substring(pathname.lastIndexOf('/') + 1)
return { dataLoaded, involvedPartyId }
}, {loadParty})
和lifecycleEnhancer
是:
const lifecycleEnhancer = lifecycle({
componentDidMount() {
this.props.loadParty(this.props.involvedPartyId)
}
})
和loading
的(请注意,在这种情况下,dataLoaded
来自已在propSetter
中完成的前connect
):
const loading = branch(
({dataLoaded}) => dataLoaded,
renderComponent(connect(mapStateToProps, mapDispatchToProps)(PartyDetails)),
renderComponent(Loading)
)
所以基本上,如果数据已经被提取,我使用第二个连接来获取PartyDetails
的相关道具。
我刚刚开始学习recompose
几天前,我找不到一个适合我的用例的例子。以上是我在阅读完文档后提出的,以及其他文章中的一些例子。
我正在做一个很好的处理方法?这是否可以以更好的方式完成,也许不需要拨打电话?
我没有在一个连接一切的原因是,数据不会在状态,当第一存在连接被调用。你的例子中有什么我想念的吗? – Geo
@Geo它实际上不是问题。在我的例子中,首先渲染数据变量将是未定义的(因为它当时不存在),我们将呈现'Loading'组件,其中不需要该数据。在第二次渲染时,当从服务器获取数据时,我们将渲染“PartyDetails”并传递派生数据 – 1ven