-
Notifications
You must be signed in to change notification settings - Fork 185
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(View): edit isSwipeBackTarget predicate #7392
fix(View): edit isSwipeBackTarget predicate #7392
Conversation
Была проблема, что до #6979: 1. переменная `prevSwipeBackResult` использовалась в `React.useEffect()`, из-за чего она была всегда актуальная, т.к. обращались мы к ней после окончания рендера. В #6979 она переместилась в **render prop**, где мы обращаемся к переменной до окончания рендера, поэтому и получалось так, что свайп бёк срабатывал в первый раз, пока `prevSwipeBackResult` являлся `null`, а во второй раз уже не срабатывал, т.к. `prevSwipeBackResult` имел предыдущее состояние. Изучил, что проверку на `prevSwipeBackResult` в целом можно удалить. 2. Событие `transitionend` навешивалось в обход **React**, а также был фолбек на `setTimeout()`. В #6979 события навешиваются через **React** – `onTransitionEnd`. Иногда обработчик не вызывался. Чтобы исправить это, перенёс навешивания события на текущий элемент (`isSwipeBackPrev`) вместо последующего (`isSwipeBackNext`). Поправил тесты под это изменение. **Изменения** - удалил `React.useCallback()` на обработчике события `onAnimationEnd`, т.к. это обычный `<div />` и мемоизация ни к чему - заодно отрефакторил `calcPanelSwipeStyles()` и `calcPanelSwipeBackOverlayStyles()`;
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 a9b8a8c |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #7392 +/- ##
===========================================
+ Coverage 0 92.75% +92.75%
===========================================
Files 0 374 +374
Lines 0 11110 +11110
Branches 0 3646 +3646
===========================================
+ Hits 0 10305 +10305
- Misses 0 805 +805
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
h2. Описание Была проблема, что до #6979: 1. переменная `prevSwipeBackResult` использовалась в `React.useEffect()`, из-за чего она была всегда актуальная, т.к. обращались мы к ней после окончания рендера. В #6979 она переместилась в **render prop**, где мы обращаемся к переменной до окончания рендера, поэтому и получалось так, что свайп бёк срабатывал в первый раз, пока `prevSwipeBackResult` являлся `null`, а во второй раз уже не срабатывал, т.к. `prevSwipeBackResult` имел предыдущее состояние. Изучил, что проверку на `prevSwipeBackResult` в целом можно удалить. 2. Событие `transitionend` навешивалось в обход **React**, а также был фолбек с `setTimeout()`. В #6979 события навешиваются через **React** – `onTransitionEnd`. Иногда обработчик не вызывался. Чтобы исправить это, перенёс навешивания события на текущий элемент (`isSwipeBackPrev`) вместо последующего (`isSwipeBackNext`). Поправил тесты под это изменение. h2. Изменения - удалил `React.useCallback()` на обработчике события `onAnimationEnd`, т.к. это обычный `<div />` и мемоизация ни к чему; - заодно отрефакторил `calcPanelSwipeStyles()` и `calcPanelSwipeBackOverlayStyles()`.
Описание
Была проблема, что до #6979:
переменная
prevSwipeBackResult
использовалась вReact.useEffect()
, из-за чего она была всегда актуальная, т.к. обращались мы к ней после окончания рендера. В refactor: reduce motion #6979 она переместилась в render prop, где мы обращаемся к переменной до окончания рендера, поэтому и получалось так, что свайп бёк срабатывал в первый раз, покаprevSwipeBackResult
являлсяnull
, а во второй раз уже не срабатывал, т.к.prevSwipeBackResult
имел предыдущее состояние. Изучил, что проверку наprevSwipeBackResult
в целом можно удалить.Событие
transitionend
навешивалось в обход React, а также был фолбек сsetTimeout()
. В refactor: reduce motion #6979 события навешиваются через React –onTransitionEnd
. Иногда обработчик не вызывался. Чтобы исправить это, перенёс навешивания события на текущий элемент (isSwipeBackPrev
) вместо последующего (isSwipeBackNext
). Поправил тесты под это изменение.Изменения
React.useCallback()
на обработчике событияonAnimationEnd
, т.к. это обычный<div />
и мемоизация ни к чему;calcPanelSwipeStyles()
иcalcPanelSwipeBackOverlayStyles()
.