-
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
feat(useResizeObserver): add ResizeObserver using when supported #8055
feat(useResizeObserver): add ResizeObserver using when supported #8055
Conversation
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. |
size-limit report 📦
|
e2e tests
|
👀 Docs deployed
Commit e1312c1 |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #8055 +/- ##
==========================================
+ Coverage 95.53% 95.55% +0.02%
==========================================
Files 398 398
Lines 11313 11321 +8
Branches 3737 3743 +6
==========================================
+ Hits 10808 10818 +10
+ Misses 505 503 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Класс! 👍
Можно только немножко подробнее в PR или в Release notes расписать саму проблему?
Исправлена проблема с ресайзом контейнера
А то в изменениях про это есть, но оно не бросается в глаза.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💅
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🙏 👏 🚀
# Conflicts: # packages/vkui/src/hooks/useResizeObserver.ts
16311f3
* feat(useResizeObserver): add ResizeObserver using when supported * fix(Gallery): add handle resize Gallery container and remove window resize handler * test(useResizeObserver, Gallery): fix tests with mock ResizeObserver * fix(Gallery): add condition to use resize hooks * feat(useResizeObserver): add logic with window in parameter * feat(Gallery): add prop resizeSource * doc(Gallery): fix doc description * fix(useResizeObserver): run prettier
✅ v7.1.0 🎉 |
Описание
Когда нам надо было реагировать на размеры компонента или отдельной его части. Мы подписывались на событие
resize
всегоwindow
. Это в основном покрывает большую часть кейсов, но не все. Есть кейсы когда размеры компонента могут поменять, даже когда размер окна не поменялся. Это приводит к багам. Поэтому появляется потребность отслеживать изменения самого компонента. Это можно сделать с помощьюResizeObserver
, но он не поддерживается всем браузерами, которые поддерживаем мы. Поэтому у нас есть CustomResizeObserver, который на некотором уровне выполняет функционалResizeObserver
, но все равно хуже. В связи с этим нужно доработать хукuseResizeObserver
так, чтобы по возможности он использоватьResizeObserver
вместоCustomResizeObserver
там где это возможноИзменения
useResizeObserver
, так чтобы он мог использоватьResizeObserver
при наличии его.useResizeObserver
, так чтобы он мог принимать в качествеref
window
. В таком случае будет использовать нативныйaddEventListener('resize'...)
useResizeObserver
вBaseGallery
иCarouselBase
, чтобы обрабатывать кейсы, когда размеры контейнера изменились и произошел пересчет позиций слайдовuseGlobalEventListener(window, 'resize')
, вместо него добавилuseResizeObserver(window, () => {})
resizeSource
, данное свойство позволяет выбрать тип источника для отслеживания размера:Release notes
Улучшения
resizeSource
для возможности выбрать тип источника, на котором нужно отслеживать изменения размеров'window'
– пересчет позиции слайдов будет происходить при изменении размеровwindow
'element'
– пересчет позиции слайдов будет происходить при изменении размеров компонента