더북(TheBook)

이제 코드의 상단에서 사용되지 않는 useEffect, useState, 그리고 lib/posts에서 불러온 함수와 상수를 모두 지워도 됩니다.

어떤가요? 컴포넌트의 코드가 아주 간결해졌지요?

더 좋은 점은 이걸 Profile 컴포넌트에서 또 한번 사용할 수 있다는 점입니다! Profile 컴포넌트는 다음과 같이 수정해주세요.

components/Profile.js

(...)
import usePosts from '../hooks/usePosts';

function Profile({userId}) {
  const [user, setUser] = useState(null);
  const {posts, noMorePost, refreshing, onLoadMore, onRefresh} = usePosts(
    userId,
  );

  useEffect(() => {
    getUser(userId).then(setUser);
  }, [userId]);

  if (!user || !posts) {
    return (
      <ActivityIndicator style={styles.spinner} size={32} color="#6200ee" />
    );
  }

  return (
    <FlatList
      style={styles.block}
      data={posts}
      renderItem={renderItem}
      numColumns={3}
      keyExtractor={(item) => item.id}
      ListHeaderComponent={
        <View style={styles.userInfo}>
          <Avatar source={user.photoURL && {uri: user.photoURL}} size={128} />
          <Text style={styles.username}>{user.displayName}</Text>
        </View>
      }
      onEndReached={onLoadMore}
      onEndReachedThreshold={0.25}
      ListFooterComponent={
        !noMorePost && (
          <ActivityIndicator
            style={styles.bottomSpinner}
            size={32}
            color="#6200ee"
          />
        )
      }
      refreshControl={
        <RefreshControl onRefresh={onRefresh} refreshing={refreshing} />
      }
    />
  );
}

(...)

이번에도 마찬가지로 코드 상단에 불필요한 import 문들은 지워도 됩니다.

컴포넌트를 만드는 도중에 지금과 같이 반복되는 로직들이 보인다면 적극적으로 커스텀 Hook을 만들어서 코드를 재사용해보세요. 프로젝트의 유지보수성을 높여줄 것입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.