UseFocusEffect 의 읽히는 순서

최영진·2023년 1월 12일
0

React

목록 보기
8/16
post-custom-banner

UseFocusEffect 의 읽히는 순서

import { useState, useCallback } from "react";
import { useColorScheme, FlatList, View } from "react-native";
 .....

export default function MyReview({

// 1.

  setIsOpenMenuModal,
  isOpenMenuModal,
  from,
}) {
  
  ...
  
  const openMenuHandler = (item) => {
    setReviewId(item.id);
    setReviewObj(item);
    setIsOpenMenuModal(true);
  };
// 1 끝

// 3.
  useFocusEffect(
    useCallback(() => {
      const q = query(
        collection(dbService, "reviews"),
        orderBy("createdAt", "desc"),
        where("userId", "==", authService.currentUser?.uid ?? "")
      );
       
       ...
  );
  
  // 3. 끝

  return (
  
  // 2. 
  
    <FlatList
      horizontal
      contentContainerStyle={{ paddingHorizontal: 20 }}
      showsHorizontalScrollIndicator={false}
      data={reviews}
      keyExtractor={(item) => item.id}
      renderItem={({ item }) => {
        if (item.itemId) {
          return (
            <MyReviewWrap>
              <ReviewItem>
                <Row>
                  <Vote vote_average={item.rating} />
                  <MenuBtn onPress={() => openMenuHandler(item)} title="︙">
                    <Fontisto name="more-v-a" size={14} color="gray" />
                  </MenuBtn>
                </Row>
                <ReviewTitle numberOfLines={1}>{item.title}</ReviewTitle>
                <ReviewText numberOfLines={1}>{item.contents}</ReviewText>
                <ReviewDate>
                  {new Date(item.createdAt).toLocaleDateString("kr")}
                </ReviewDate>
              </ReviewItem>
            </MyReviewWrap>
          );
        }
      }}
    />
  );
}

// 2. 끝

const Row = styled.View`
  flex-direction: row;
  justify-content: space-between;
`;


....

코드의 순서대로 1, 2, 3번 의 순서로 읽힌다.

지금까지 위에서 아래로 쭉 렌더링 되는줄 알았지만

useEffect 는 의존배열에 [] 아무것도 주지 않으면
화면이 렌더링 될때 실행된다고 생각했지만

return 이 모두 렌더링 된 후! 실행이 되는 것이었다.!

까먹지 말자!

profile
안녕하시오.
post-custom-banner

0개의 댓글