我遇到了反应导航事件侦听器的问题!
逻辑:每当用户进入我的本机应用程序的购物车屏幕时,我想获取购物车详细信息。为了确定是否获取购物车详细信息,我在商店中检查了购物车ID。如果cart id为null,则表示尚未创建购物车,因此请关闭加载程序,不要获取购物车详细信息。另一方面,如果商店中有购物车ID,请获取购物车详细信息。
场景1:第一次,如果商店中没有购物车ID时我来到购物车屏幕,它将不会加载购物车详细信息:一切都很好!但是,在随后访问购物车屏幕后,即使商店中有购物车ID,它也不会获取购物车详细信息。
场景2:第一次,如果商店中有购物车ID时,我访问购物车屏幕,那么它将在这次以及以后的访问中获取购物车详细信息。
可能的问题:因此,问题似乎是事件侦听器将使用首次运行时将提供的购物车值,而不考虑更新后的值!请指出正确的方向!
useEffect(()=>{
let cartId = context.store.cartReducer.cart.id;
const unsubscribe = props.navigation.addListener('focus', () => {
if(cartId) {
setIsDetailsLoading(true);
fetchCartDetails(context.dispatch, {cartId: cartId});
} else {
setIsDetailsLoading(false);
}
});
return unsubscribe;
}, []);
尝试使用“ willFocus”而不是“ focus”
useEffect(()=>{
let cartId = context.store.cartReducer.cart.id;
const unsubscribe = props.navigation.addListener('willFocus', () => {
if(cartId) {
setIsDetailsLoading(true);
fetchCartDetails(context.dispatch, {cartId: cartId});
} else {
setIsDetailsLoading(false);
}
});
return unsubscribe;
}, []);