-
Notifications
You must be signed in to change notification settings - Fork 184
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(PullToRefresh): Prevent multiple calls of runRefreshing on iOS #6723
fix(PullToRefresh): Prevent multiple calls of runRefreshing on iOS #6723
Conversation
On iOS PullToRefresh can start refreshing earlier than on other platforms. We call runRefreshing() withing onTouchMove. Since refreshing is a state variable, it can't be updated earlier than another event of onTouchMove is called, so, we have to user ref flag to avoid triggering runRefreshing more than once.
size-limit report 📦
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. |
e2e tests |
👀 Docs deployed
Commit dac4c48 |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #6723 +/- ##
==========================================
+ Coverage 82.35% 82.36% +0.01%
==========================================
Files 335 335
Lines 10332 10351 +19
Branches 3461 3467 +6
==========================================
+ Hits 8509 8526 +17
- Misses 1823 1825 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
На iOS мы вызываем `runRefreshing` внутри `onTouchMove` обработчика, который может вызываеться чаще чем обновляется состояние refreshing в стейте компонента. https://github.com/VKCOM/VKUI/blob/78e4cb5a5fe44fda8bbe87d079156566b2aa6ce9/packages/vkui/src/components/PullToRefresh/PullToRefresh.tsx#L222-L224 Это в свою очередь влечет за собой двойной вызов `onRefresh`. Изменения - добавляем состояние вызова `runRefreshing()` через ref, чтобы избежать повторного вызова `runRefreshing`. Cбрасываем состояние в обработчике onTouchEnd(). Это локальная проблема конкретного условия, что runRefreshing() на iOS вызывается в определённый момент ещё до конца жеста, поэтому и ref используем только в одном месте.
Описание
На iOS мы вызываем
runRefreshing
внутриonTouchMove
обработчика, который может вызываеться чаще чем обновляется состояние refreshing в стейте компонента.VKUI/packages/vkui/src/components/PullToRefresh/PullToRefresh.tsx
Lines 222 to 224 in 78e4cb5
Это в свою очередь влечет за собой двойной вызов
onRefresh
.Изменения
runRefreshing()
через ref, чтобы избежать повторного вызоваrunRefreshing
. Cбрасываем состояние в обработчике onTouchEnd().Это локальная проблема конкретного условия, что runRefreshing() на iOS вызывается в определённый момент ещё до конца жеста, поэтому и ref используем только в одном месте.