개발자

리액트 네이티브 flatlist 관련 질문 받아주실 분 있으실까요?

2024년 01월 04일조회 65

제가 리액트 네이티브로, 위아래로 슬라이드 하면 한 달씩 넘어가는 캘린더를 만들고 있습니다. 그래서 전체를 FlatList로 만들고 스크롤 시 y인덱스를 받아와서 한 달씩 랜더하는 식으로 코드를 구현하였습니다. const handlePageChange = (newPage: number) => { if(newPage !=0) { const newDate = new Date(currentDate); newDate.setMonth(newDate.getMonth() + newPage); setCurrentDate(newDate); } }; return ( <FlatList data={[...Array(1).keys()]} keyExtractor={(item) => item.toString()} renderItem={({ item }) => ( <CalendarMonth currentDate={{ currentDate }} ClickedDate={{ ClickedDate }} setClickedDate={setClickedDate} /> )} horizontal={false} pagingEnabled= {true} showsVerticalScrollIndicator={false} scrollEventThrottle={100000} onScrollEndDrag={(event) => { const offset = event.nativeEvent.contentOffset.y; const direction = offset === 0 ? 0 : offset > 0 ? 1 : -1; handlePageChange(direction); }} /> ); 이런 식으로 코드를 구현하였는데 위로 잡아 올렸을 때 빈칸이 보이는데 저는 스크롤 시 모션은 보이지 않고 바로 다음 달력으로 넘어갔으면 합니다. 혹시 스크롤 시에 달력이 움직이지 않고 바로 넘어갈 수 있는 방법이 있을까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 0

답변이 없을 때 보이는 아이콘

첫 답변을 기다리고 있어요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 01월 04일

리액트 네이티브의 FlatList에서 페이지처럼 바로 다음 아이템으로 넘어가는 기능을 구현하기 위해서는 scrollToIndex 메소드를 사용할 수 있습니다. 이 메소드는 FlatList ref에 있는데, 인덱스를 파라미터로 받아 해당 아이템으로 스크롤하는 기능을 합니다. 먼저, onScrollEndDrag 에서는 특정 조건일 때 스크롤할 인덱스를 계산하고 이를 state에 저장합니다. 그리고 이 state를 useEffect의 dependency로 넣어 state가 변경되었을 때 scrollToIndex를 호출하도록 설정합니다. ```jsx const [currentIndex, setCurrentIndex] = React.useState(0); // 현재 위치 추적용 useState ... const handlePageChange = (newPage: number) => { if(newPage !=0) { const newDate = new Date(currentDate); newDate.setMonth(newDate.getMonth() + newPage); setCurrentDate(newDate); // 위나 아래로 스크롤 시 currentIndex 업데이트 if (newPage > 0) { setCurrentIndex(prevState => prevState + 1); } else { setCurrentIndex(prevState => prevState - 1); } } }; ... const flatlistRef = React.useRef(null); React.useEffect(() => { // currentIndex 변경 시 해당 위치로 스크롤 flatlistRef.current.scrollToIndex({animated: false, index: currentIndex}); }, [currentIndex]); .... <FlatList ... ref={flatlistRef} ... ``` 이 방법을 사용하면 스크롤 도중에 중간 페이지가 보이지 않고 바로 다음 페이지로 이동하는 효과를 얻을 수 있습니다. 사용자는 아이템 사이의 원활한 전환을 경험하지 못하게 되며, 대신 바로 다음 달력으로 이동하는 것을 볼 수 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!