我已经设置了一个带有react-redux的项目,并且在动作创建者中使用redux-thunk进行获取。这是我的重击示例:
export const doPostRequest = id => {
return (dispatch, getState) => {
const { id : initiailId } = getState().currentSelection
return api.post(id).then(response => {
if (!isEqual(initialId, getState().currentSelection.id)){
return;
}
dispatch(someOtherAction(id))
return Promise.resolve(true)
})
.catch(err => {})
}
}
如您所见,如果我的状态的currentSelection到接收响应时已更改,我想逃避doPostRequest。否则,我返回Promise.resolve(true),因此MyComponent中的onSubmit可以重置表单:
在组件(它是表单)内部,我对onSubmit具有以下要求:
class MyComponent extends React.PureComponent{
onSubmit = id => {
this.props.dispatch(doPostRequest(id))
.then(shouldReset => shouldReset && resetForm())
}
render(){
return <form onSubmit={this.onSubmit}>.....</form>
}
}
在大多数情况下,当我真的不需要执行任何其他操作(除了获取值)时,即使返回了Promise,我也不会在thunk上执行Promise链,但是在postrequest是成功。
就GC而言,此实现是否足够好?如何收集承诺垃圾?如果我返回fetch()。then()而不进一步链接它,是否有问题?