rhanziy

React Native - 아래로 끌어내려서 새로고침 RefreshControl 본문

React Native

React Native - 아래로 끌어내려서 새로고침 RefreshControl

rhanziy 2023. 11. 23. 22:58

RefreshControl

스크롤뷰(scrollView)나 리스트뷰(FlatList)에서 상단에서 하단으로 끌어내려서 새로고침할 수 있는 기능이다.

 

 

🔽 공식문서 코드

import React from 'react';
import {
  RefreshControl,
  SafeAreaView,
  ScrollView,
  StyleSheet,
  Text,
} from 'react-native';

const App = () => {
  const [refreshing, setRefreshing] = React.useState(false);

  const onRefresh = React.useCallback(() => {
    setRefreshing(true);
    setTimeout(() => {
      setRefreshing(false);
    }, 2000);
  }, []);

  return (
    <SafeAreaView style={styles.container}>
      <ScrollView
        contentContainerStyle={styles.scrollView}
        refreshControl={
          <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />
        }>
        <Text>Pull down to see RefreshControl indicator</Text>
      </ScrollView>
    </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  scrollView: {
    flex: 1,
    backgroundColor: 'pink',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

export default App;

 

사용법 핵간단.

근데 이대로 쓰면 안됨. 데이터 불러오는 api는 보통 useQuery를 이용하니까 useQuery 반환 값 refetch와 isFetched를 사용해

위 코드를 살짝 바꿔줍시다.

  const {data, isFetched, refetch} = useQuery커스텀훅();
  const [refreshing, setRefreshing] = useState(false);
 

  const onRefresh = () => {
    setRefreshing(true);
    refetch();
    setRefreshing(false);
  };
  
  
  <KeyboardAwareFlatList
	{...}
      refreshControl={
        <RefreshControl onRefresh={onRefresh} refreshing={refreshing} />
      }
    />

이러면 아주 잘 새로고침된다. 호호호

 

🚨🚨비상발생🚨🚨

알고보니 RefreshContrl import 경로가 react-native로 되어있었음. 바꿔주자...

import {RefreshControl} from 'react-native-gesture-handler';
Comments