我有一条匹配/roles/:id
之类的路线,然后进入右侧窗格(见下文)。我正在使用@connect
将一些道具和动作传递到我的组件中,其中一个操作根据id
钩子中的路径参数componentWillMount
获取一些数据。
我的问题是,当用户点击右侧列表中的不同实例,从而改变路径(但不是取消/挂载组件!)时,我无法想到一种干净的方法来确保操作再次被解雇。
我曾想过挂钩componentWillReceiveProps
,但显然会创建一个无限的渲染循环。我在这里错过了什么吗?
答案 0 :(得分:1)
有两种方法可以做到这一点
1-使用装饰器模式来获取数据redux-async-connect
2-像这样使用redux-thunk
export function fetchFoo(id) {
return dispatch => {
dispatch({type:'LOADING'});
fetch(`/book/${id}`, (response) => {
if(response.status == 200){
dispatch({type:'SUCCESS'});
}else {
dispatch({type:'FAIL'});
}
})
}
}
初始状态应为loading=true
,isLoaded=true
LOADING
缩减器中,您应该在您的州设置loading=true
并在触发loading
操作之前检查fetchFoo
标志
这样你就不会有无限的请求
componentWillReceiveProps:(nextProps){
if(!nextProps.loading && !nextProps.isLoaded){
fetchFoo(params);
}
}
我准备第一个解决方案使用decorator-pattern
用于容器组件