커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
앱플러스강의를 받았습니다.(wegram)
[왕초보] 나만의 수익성 앱, 앱개발 종합반 v3
기타
북마크
류*무
댓글
1
추천
0
조회수
6
조회수
6
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


5-9강의 에서 베너 자리에 빙글빙글 돌고 있읍니다.

어떤 이유인지 전혀 모르겠습니다.. 



스파르타 즉문즉답

고 계신 화면 전체를 캡처해 주시면, 튜터님들이 빠르게 상황을 이해할 수 있어요.




작성한 코드 및 에러 메세지

firebaseFunctions.jsx--------------------------------------------------

export async function getData(setNext, setData) {

  try {

    let data = [];

    const db = firebase.firestore();

    const first = db.collection('diary').orderBy('date', 'desc').limit(5);

    const snapshot = await first.get();

    const currentUser = firebase.auth().currentUser;

    // snapshot.docs.map((doc) => {

    //   console.log('[페이지네이션 01]');

    //   data.push(doc.data());

    // });

    let last;

    if (snapshot.docs.length !== 0) {

      last = snapshot.docs[snapshot.docs.length - 1];

    }

    setNext(last.data().date);

    let count = 0;

let limit = snapshot.docs.length;

    snapshot.docs.map(async (doc) => {

      console.log('[페이지네이션 01]');

      let d = doc.data();

      const like = await db

        .collection('diary')

        .doc(d.date + 'D')

        .collection('likes')

        .doc(currentUser.uid)

        .get();

      if (like.data() == undefined) {

        d.like = false;

      } else {

        d.like = true;

      }

let limit = snapshot.docs.length;

    snapshot.docs.map(async (doc) => {

      console.log('[페이지네이션 01]');

      let d = doc.data();

      const like = await db

        .collection('diary')

        .doc(d.date + 'D')

        .collection('likes')

        .doc(currentUser.uid)

        .get();

      if (like.data() == undefined) {

        d.like = false;

      } else {

        d.like = true;

      }

export async function getNextData(nextDate, setNext) {

  try {

    console.log('불러올 다음 date: ' + nextDate);

    let data = [];

    const db = firebase.firestore();

    const next = db

      .collection('diary')

      .orderBy('date', 'desc')

      .startAfter(nextDate)

      .limit(5);

    const snapshot = await next.get();

    snapshot.docs.map((doc) => {

      console.log('[페이지네이션 Next]');

      doc.data();

      data.push(doc.data());

    });

    let last;

    if (snapshot.docs.length !== 0) {

      last = snapshot.docs[snapshot.docs.length - 1];

      setNext(last.data().date);

      return data;

    } else {

      return 0;

    }

  } catch (err) {

    console.log(err);

    return false;

  }

}

----------------------------------------------------------

MainPage.jsx --------------------------------------

export default function MainPage({ navigation }) {

  const [data, setData] = useState([]);

  const [next, setNext] = useState(0);

  useEffect(() => {

    navigation.addListener('beforeRemove', (e) => {

      e.preventDefault();

    });

    getData(setNext, setData);

  }, []);

  console.log('게시글 마지막값:' + next);

  return (

    <Container>

      <HeaderComponent />

      {data.length == 0 ? (

        <ActivityIndicator size="large" />

      ) : (

        <FlatList

          data={data}

          ListHeaderComponent={() => {

            return (

              <Content style={{ marginTop: 30 }}>

                <Animatable.View

                  animation="pulse"

                  easing="ease-out"

                  iterationCount={'infinite'}

                  direction="alternate"

                >

                  <Grid style={styles.banner}>

                    <Col size={1} style={{ padding: 20 }}>

                      <Icon name="paper-plane" style={{ color: 'deeppink' }} />

                    </Col>

                    <Col size={6} style={{ padding: 15 }}>

                      <Text>이야기 하고 싶은 친구들에게</Text>

                      <Text style={{ fontWeight: '700' }}>

                        wegram을 전하세요

                      </Text>

                    </Col>

                  </Grid>

                </Animatable.View>

                <Grid style={{ padding: 20 }}>

                  <Text style={{ color: 'grey' }}>THE DIARY</Text>

                </Grid>

              </Content>

            );

          }}

          onEndReachedThreshold={Platform.OS == 'ios' ? 0 : 0.3}

          onEndReached={async () => {

            console.log('바닥 가까이 감: 리프레시');

            let nextData = await getNextData(next, setNext);

            if (nextData == 0) {

              Alert.alert('더이상 글이 없어요!');

            } else {

              let newData = [...data, ...nextData];

              console.log('처음5개와 다음5개 newData변수로 넣는다');

              await setData(newData);

            }

          }}

          renderItem={(data) => {

            // console.log(data);

            return (

              <CardComponent navigation={navigation} content={data.item} />

            );

          }}

          numColumns={1}

          keyExtractor={(item) => item.date.toString()}

        />

      )}

    </Container>

  );

}발생 시, 작성한 코드 전체와 에러 메시지를 첨부해 주세요.

Tip 1) </> 아이콘을 눌러 코드박스를 만들어 보세요.

Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!




취소
 공유
취소
댓글 0
댓글 알림
나의얼굴