그런데 ref 속성이 있는 사용자 컴포넌트는 forwardRef 함수로 생성해야 한다는 조건이 존재...
React, R/N
에서 제공하는 코어 컴포넌트 중에서
TextInput, ScrollView, FlatList
컴포넌트 처럼
┗ 메서드를 제공하는 것이 있음!!!
TextInput : focus, blur
같은 메서드 제공
ScrollView, FlatList : scrollToTop, scrollToEnd
같은 메서드를 제공
그런데 컴포넌트의 메서드를 호출하기 위해서는
┠ 컴포넌트의 리액트 요소
를 얻을 수 있어야만
┗ 컴포넌트_객체.메서드()
형태로 호출이 가능!!!
interface RefObject<T> {
readonly current: T | null;
RefObject<T>
에서의 current
속성 타입은T, null
임을 확인할 수 있다. → 고로 current : T | null
어떤 시점
에서는 current는 null이 아닌 요소의 값이 설정되어 메서드 호출이 가능
하다.const flatListRef = useRef<FlaList | null>(null);
<FlatList ref={flatListRef} />
flatListRef.current?.scrollToEnd()
여기서 사용된 ?(물음표)의 이유는 옵션 체이닝 연산자이다.
RefObjcect<FlatList | null>
이므로null 인지 아닌지 모르겠다면 옵션 체이닝 연산자를 쓰게 되면 오류가 안난다 😙
ScrollView
와 FlatList는
onContentSizeChange
이벤트 속성을 제공함넓이나 높이가 변하면
설정된 콜백 함수를 호출!!!
onContentSizeChange?: (w: number, h: number) => void;
onContentSizeChange 이벤트
가 발생하게 됨onContentSizeChange 콜백 함수
에서scrollToEnd
메서드 호출 → 아이템 추가에 따른 자동 스크롤 기능
구현이 가능해짐! 🤗const onContentSizeChange = useCallback(
()=> flatListRef.current?.scrollToEnd(),
[flatListRef.current]) // null 에서 유요한 값으로 바뀔 수 있기 때문
);
<FlatList onContentSizeChange={onContentSizeChange}/>
[리액트 네이티브 앱프로그래밍]-(전예홍)