실무에서 성능 고려하여 유지보수등 가독성을 끌어올리기위하여 아래와 같은 작업을 진행했으며 부분적으로 올려서 예시 추가된 코드
리팩토링한 코드(타입 지정) - api 호출 타입 재정의 서비스단으로 api dto 생성 하는 부분 추가 -> https://github.com/asdf132645/reactToyProject/
GitHub - asdf132645/reactToyProject: reactToyProject
reactToyProject. Contribute to asdf132645/reactToyProject development by creating an account on GitHub.
github.com
현회사에서 무한으로 스크롤 페이징이 되는 처리를 요구하였다.
여기에 맞게 코드를 작성하고 만들기전에 전에 겪었던 문제점을 생각했다.
전에는 스크롤 위치를 잡아 구현 했을때 제대로된 동작을 안하고 엉뚱하게 흘러가는 부분이 있어서 다른 방법을 모색 하였다.
https://developer.mozilla.org/ko/docs/Web/API/IntersectionObserver
IntersectionObserver - Web API | MDN
Intersection Observer API의 IntersectionObserver 인터페이스는 대상 요소와 상위 요소, 또는 대상 요소와 최상위 문서의 뷰포트가 서로 교차하는 영역이 달라지는 경우 이를 비동기적으로 감지할 수 있는
developer.mozilla.org
new IntersectionObserver 라는 것을 사용하기로 하였다.
api 를 호출 하는 부분을 생성하고
<div className="app-container op-profile">
<div className="open-main-mypage">
<div className="order-List" style={{minHeight: '930px'}}>
{inquiries?.length === 0 ?
<>
<div className="no-data">
<div className="ic"><img src="/images/app/ico-no-pay-data.svg" alt=""/></div>
<p className="description">
내 문의내역이 없습니다.
</p>
</div>
</>
:
<>
<ul>
{inquiries.map((inquiry: any, idx: number) => (
<li
key={idx}
onClick={() => {
router.push(`/myPage/inquiry/inquiryDetail?id=${inquiry.id}&status=${inquiry.status}`);
}}
>
<div>
<p
className={
inquiry.categoryName === 'ETC' ?
'category col-4'
: inquiry.categoryName === 'JOIN' ?
'category col-3'
: inquiry.categoryName === 'TAX' ?
'category col-1'
: inquiry.categoryName === 'EMPLOYEE' ?
'category col-2'
: 'category col-4'
}
>
{inquiry.category}
</p>
<p className="subject"
style={{whiteSpace: 'pre-wrap'}}>{inquiry.title}</p>
<p className="datetime">{formatDate(inquiry.writtenAt)}</p>
</div>
<p className={`status ${inquiry.status === 'A' ? 'end' : 'ing'}`}>
{inquiry.status === 'A' ? '답변완료' : '답변대기'}
</p>
</li>
))}
</ul>
</>
}
<div ref={loadMoreRef} style={{height: '10px'}}></div>
</div>
</div>
</div>
태그 부분을 생성해주고
<div ref={loadMoreRef} style={{height: '10px'}}></div>
원하는 위치에 ref 로 해당 영역을 잡아준다. 해당 위치로 스크롤이 내려갈 시 api 호출하는 방법이다.
간단하게 useEffect 훅을 사용하여 작성하면 기능 구현 완료
'react' 카테고리의 다른 글
[Redux, Redux-Thunk, Redux-Saga] 주요 개념 정리 (0) | 2023.12.06 |
---|---|
recoil 개념 정리(리액트 리코일: 상태 관리의 새로운 효율성) (0) | 2023.12.06 |
리액트 리팩토링 작업 (0) | 2023.12.06 |
useState 비동기 문제 해결 과정 (0) | 2023.12.05 |