【发布时间】:2020-04-17 23:55:08
【问题描述】:
我刚开始学习 Redux,我对其目的有疑问。据我所知,redux-thunk 会延迟一个动作的派发,所以在下面的代码中,它会等到服务器响应后再派发。但这不是承诺的工作。以我的基本知识,里面的回调 then 无论如何都应该在我们得到响应后才被调用,对吧?
export const fetchRentalById = (rentalId) => {
return dispatch => {
axios.get(`/api/v1/rentals/${rentalId}`)
.then((rental) => {
dispatch({
type: FETCH_BY_ID,
payload: rental.data
})
})
}
}
所以我尝试删除 return 中的调度,由于某些原因,它会在服务器响应之前调度,但对我来说似乎没有意义。感谢您的阅读。 调用组件
const {rental, fetchRentalById} = props;
let rentalId = props.match.params.id;
useEffect(() => {
fetchRentalById(rentalId);
}, [ rentalId, fetchRentalById]);
...
const mapState = state => {
return {
rental: state.data.rental
};
};
export default connect(mapState, {fetchRentalById})(RentalDetail);
我使用mapDispatchToProps,所以这里不需要使用props.dispatch。
【问题讨论】:
-
Redux 不会延迟 action 的派发,是 axios.get 返回的promise 的工作。目前尚不清楚您将调度转移到何处、结果发生了什么或您希望将其转移到什么地方来提供帮助。
-
@jonrsharpe 是的,我犯了一个大错误。如果一个动作在异步调用之前返回一个调度,那么延迟调度是 redux-thunk,就像上面的例子一样。对不起那个错误。
-
你能从你的组件中添加你的 fetchRentalById 调用吗?
-
@RamiLoiferman 已编辑。谢谢。
-
redux-thnuk只需将dispatch函数作为参数注入到您的操作中,当您的操作是一个函数时,它并不关心它是同步还是异步,它唯一做的就是给出您可以随时从 thunk 内部调用调度