即使具有清理功能,React Native 深度链接不需要的组件也会呈现
React native deep linking unwanted component renders even with cleanup function
我的深层链接句柄 URL 遇到问题,这是我的组件在 URL 进入我的应用程序后多次呈现。换句话说,假设浏览器在客户选择所需的会话时间(由状态处理)后打开购买操作,并且在客户决定购买或取消购买后,应用程序打开显示结果但它会多次执行.
这是组件的一部分:
const bookingHandler = () => {
if(selected == null) {
Alert.alert('Invalid Selection', 'Please select one of the sessions!')
return;
}
Linking.openURL('http://www.medicalbookingapp.cloudsite.ir/sendPay.php');
}
selectedTimeIndex = therapists.meetingPlans[selectedPlanIndex].times.findIndex((el) => el.time == selected.title);
useEffect(() => {
Linking.addEventListener('url', (e) => handleOpenUrl(e.url))
return () => {
Linking.removeEventListener('url', (e) => handleOpenUrl(e.url));
console.log('event removed')
}
});
const handleOpenUrl = (url) => {
const route = url.replace(/.*?:\/\/\w*:\w*\/\W/g, '') // exp://myapplication.... --> ''
const id = route.split('=')[1]
if(id == 1) {
dispatch(
BookingActions.addBooking(
therapistId,
therapistFirstName,
therapistLastName,
selected.title,
moment(selectedDate).format("YYYY-MMM-DD"),
selected.slots,
)
);
dispatch(
doctorActions.updateTherapists(therapistId, selected.slots, selectedDate, selected.title, selectedPlanIndex, selectedTimeIndex)
);
setBookingConfirm(true)
toggleModal();
} else if(id == 0) {
console.log('purchase failed...');
toggleModal();
}
}
我在 useEffect
挂钩中处理我的侦听器,它还具有清理功能。但在控制台中我得到这个错误:
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s, a useEffect cleanup function.
我还注意到了一些其他的东西,为了抓住问题你可以看到组件屏幕,并且会话 select 部分是用 state
处理的。呈现 useEffect
挂钩的数量与 select 会话状态的更改数量有某种关系。 (我的意思是,如果我在 select 会话中反弹,它会渲染更多)
如果您需要更多信息,请在评论中告诉我。
任何帮助将不胜感激。
一个可能的问题是您可能创建了两个处理程序,一个在 addListener 中,另一个在 removeListener 中。
你能试试吗:
const handler = (e) => handleOpenUrl(e.url);
Linking.addEventListener('url', handler);
return () => {
Linking.removeEventListener('url', handler);
console.log('event removed')
}
我的深层链接句柄 URL 遇到问题,这是我的组件在 URL 进入我的应用程序后多次呈现。换句话说,假设浏览器在客户选择所需的会话时间(由状态处理)后打开购买操作,并且在客户决定购买或取消购买后,应用程序打开显示结果但它会多次执行.
这是组件的一部分:
const bookingHandler = () => {
if(selected == null) {
Alert.alert('Invalid Selection', 'Please select one of the sessions!')
return;
}
Linking.openURL('http://www.medicalbookingapp.cloudsite.ir/sendPay.php');
}
selectedTimeIndex = therapists.meetingPlans[selectedPlanIndex].times.findIndex((el) => el.time == selected.title);
useEffect(() => {
Linking.addEventListener('url', (e) => handleOpenUrl(e.url))
return () => {
Linking.removeEventListener('url', (e) => handleOpenUrl(e.url));
console.log('event removed')
}
});
const handleOpenUrl = (url) => {
const route = url.replace(/.*?:\/\/\w*:\w*\/\W/g, '') // exp://myapplication.... --> ''
const id = route.split('=')[1]
if(id == 1) {
dispatch(
BookingActions.addBooking(
therapistId,
therapistFirstName,
therapistLastName,
selected.title,
moment(selectedDate).format("YYYY-MMM-DD"),
selected.slots,
)
);
dispatch(
doctorActions.updateTherapists(therapistId, selected.slots, selectedDate, selected.title, selectedPlanIndex, selectedTimeIndex)
);
setBookingConfirm(true)
toggleModal();
} else if(id == 0) {
console.log('purchase failed...');
toggleModal();
}
}
我在 useEffect
挂钩中处理我的侦听器,它还具有清理功能。但在控制台中我得到这个错误:
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s, a useEffect cleanup function.
我还注意到了一些其他的东西,为了抓住问题你可以看到组件屏幕,并且会话 select 部分是用 state
处理的。呈现 useEffect
挂钩的数量与 select 会话状态的更改数量有某种关系。 (我的意思是,如果我在 select 会话中反弹,它会渲染更多)
如果您需要更多信息,请在评论中告诉我。 任何帮助将不胜感激。
一个可能的问题是您可能创建了两个处理程序,一个在 addListener 中,另一个在 removeListener 中。
你能试试吗:
const handler = (e) => handleOpenUrl(e.url);
Linking.addEventListener('url', handler);
return () => {
Linking.removeEventListener('url', handler);
console.log('event removed')
}