Skip to content
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

[Park] Intersect Listener #35

Merged
merged 4 commits into from
Jan 10, 2023
Merged

[Park] Intersect Listener #35

merged 4 commits into from
Jan 10, 2023

Conversation

healtheloper
Copy link
Member

close #33

Infinity Scroll 을 구현하기 위한 Intersect Listener 입니다.
한번 구현해보셨다면 어렵지 않게 로직 파악을 하실 수 있을텐데, 특이하다고 생각되는 몇 개만 설명하겠습니다

  1. entries 가 아닌 entry 하나만 사용
  • 관찰하는 요소가 Intersect Listener 컴포넌트 안에 하나만 있어 entries 로 만들 필요가 있나? 라고 생각했습니다.
  1. observer 를 useRef 로 선언
  • SSR 에서는 전역객체가 브라우저 환경과 달라 IntersectionObserver 메서드를 제대로 찾지 못하는 이슈가 있어 (수정커밋) useEffect 내부에서 선언하여 사용해야 했습니다. 따라서 useRef 를 사용하였습니다. ( reference )
  1. md 로 컴포넌트를 설명하는 것에 추가하여 개발 환경에서도 jsdoc 을 활용하면 더 생산성이 좋아지겠다는 생각으로 도입해보았습니다.

@netlify
Copy link

netlify bot commented Dec 21, 2022

Deploy Preview for idyllic-puffpuff-476e23 ready!

Name Link
🔨 Latest commit bd35a7f
🔍 Latest deploy log https://app.netlify.com/sites/idyllic-puffpuff-476e23/deploys/63bd5ff6e1070a00085274ff
😎 Deploy Preview https://deploy-preview-35--idyllic-puffpuff-476e23.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

Copy link
Contributor

@hemudi hemudi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SSR, Node 환경까지 고려해서 작업하신게 인상깊네요!
LGTM!! 👍

Comment on lines +11 to +32
/**
*
* @name IntersectListener
* @description scroll 이벤트를 사용하지 않고, IntersectionObserver를 사용하여 대상 요소의 가시성을 감지합니다.
* @props rootMargin - root 가 가진 여백입니다. `default: 0px 0px 0px 0px`
* @props threshold - observer의 콜백이 실행될 대상 요소의 가시성 퍼센티지입니다. (0~1) `default: 0.0`
* @props onIntersect - 대상 요소가 가시성에 들어왔을 때 실행될 콜백입니다.
* @props unobserve - observer를 해제할지 여부입니다. `default: false`
* @example
* ```tsx
* <IntersectListener
* onIntersect={() => setPage((prev) => prev + 1)}
* unobserve={page === 3}
* >
* <FlexBox sx={{ width: '1240px', flexWrap: 'wrap', gap: '40px 10px' }}>
* {elements.map((element) => (
* <Card key={element} number={element} />
* ))}
* </FlexBox>
* </IntersectListener>
* ```
*/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

호옹...VSCode 에서 확인해보니 확실히 따로 문서 확인을 할 필요가 없어서 사용법 파악하기가 훨씬 편하네요 ^_^)b 짱입니당

Copy link
Contributor

@jindonyy jindonyy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jsdoc 좋네용! 유지보수할 때 좋을거 같아여!
SSR을 고려하니 확실히 useEffect를 꽤 쓰게 되네여 잘봤습니다!!

@healtheloper healtheloper merged commit f9addf7 into dev Jan 10, 2023
@healtheloper healtheloper deleted the feat/intersect-listener/#33 branch January 10, 2023 12:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Intersection Listener
3 participants