inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

콘솔로그가 2번 찍히는데 이유를 잘 모르겠습니다.

해결된 질문

315

Jun

작성한 질문수 14

0

05-05-dynamic-routing-board-mutation

강의에 있는 내용을 구현했습니다

이상은 없게 정상 작동하는데

콘솔로그가 2번 찍히는데 이해가 가지 않습니다

===========================================

폴더구조

================================================

05-05-dynamic-routing-board-mutation/index.js

import {gql, useMutation} from "@apollo/client";
import {useRouter} from "next/router";

const 나의그래프큐엘세팅 = gql`
    mutation createBoard($writer: String, $title: String, $contents: String){
        createBoard(writer: $writer, title: $title, contents: $contents){
            _id
            number
            message
        }
    }
`
export default function GraphqlMutationPage() {

    const router = useRouter()

    const [나의함수] = useMutation(나의그래프큐엘세팅)

    const onClickSubmit = async () => {

        try{
            // try에 있는 내용을 시도하다가 실패하면, 다음에 있는 모든 줄들을 모두 무시하고, catch에 있는 내용이 실행됨.

            const result = await 나의함수({
                variables: {
                    writer: "호날두",
                    title: "모두다 외쳐",
                    contents: "Siuuuu~~~~~~"
                }
            })
            //console.log("result 값은 다음과 같습니다", result)
            //console.log("동적라우팅 주소는 number라고 지칭했고 다음과 같아요", result.data.createBoard.number)
            // router.push('/section05/05-05-dynamic-routing-board-mutation-moved' + result.data.createBoard.number)
            router.push(`/section05/05-05-dynamic-routing-board-mutation-moved/${result.data.createBoard.number}`)

        }catch (error){
            alert(error.message)
        }
    }
    return <button onClick={onClickSubmit}>GRAPHQL-API 요청하기</button> // 한줄일 때는 괄호 ( ) 가 필요없다.
}

===========================================================

05-05-dynamic-routing-board-mutation-moved/[number]/index.js

import {gql, useQuery} from "@apollo/client";
import {useRouter} from 'next/router'

const FETCH_BOARD = gql`
    query fetchBoard($number: Int){
        fetchBoard(number:$number){ # 1번 게시글 내용에 생략된 내용이 많아서 19047을 1번 게시글로 가정
            number
            writer
            title
        contents
    }
}
`
export default function StaticRoutingMovedPage(){

    const router = useRouter()
    console.log("라우터에 뭐가 들어있는지 알아보기",router)

    const { data } = useQuery(FETCH_BOARD, {
        variables: {
            number: Number(router.query.number)
        }
    })

    console.log("데이터에 뭐가 들어있는지 알아보기",data)

    return(
        <>
            <div>{router.query.number}번 게시글 이동이 완료됐어요!!😀😀</div>
            <div>작성자: {data && data.fetchBoard?.writer}</div>
            <div>제목: {data?.fetchBoard?.title}</div>
            <div>내용: {data? data.fetchBoard?.contents : "로딩중입니다."}</div>
        </>
    )
}

==================================================================

브라우저 콘솔창

-> 여기서 GraphQL요청 후 콘솔 찍어놓은게 2번 반복됩니다.

위의 내용 확대

 

==================================================================

네트워크 탭

여기에 GraphQl 요청이 두번 나간 것 같은데 그것 때문에 그런 건가요?

아니면 data 내용을 콘솔 찍었을때 한번 undefined 처리가 되어서 데이터를 받아오는 과정에서 한번 더

콘솔이 찍힌건가요?

 

react node.js seo graphql next.js

답변 1

1

노원두

안녕하세요! Jun님!

해당 부분은 setState의 원리를 이해하셔야 하는 부분이랍니다!^^

뒤에 이어지는 강의부분에서 setState의 원리라는 수업이 있어요!
해당 수업을 듣게 되시면, state값이 변경되면 변경된 state 값을 화면에 새롭게 보여주기 위해 해당 컴포넌트 전체가 새롭게 다시 그려지게 되는데, 이것을 리렌더링이라고 불러요!

data 역시 undefined 이었다가, 백엔드로부터 데이터를 받아오게 되면 변경이 되는데, 이도 내부적으로는 state이므로 화면이 새롭게 그려지는 리렌더링이 발생한 것이랍니다!^^

그렇다면, 이후에는 이런 비효율적인 리렌더링을 최소화하는 방법들에 대해서도 공부해 보셔야겠죠?!
이러한 내용들은 강의 후반부에 메모이제이션 등의 주제로 배워보실 수 있답니다!^^

1

Jun

빠른 답변 감사합니다. 도움이 많이 되었네요

fetchBoardsOfMine, fetchBoardsCountOfMine 에러 문의드립니다

0

40

1

댓글 기능 구현 중 질문드립니다.

0

66

1

쿠폰코드 발급

0

136

2

example 서버 플레이그라운드, API 접속 모두 안됩니다.

0

87

2

문의드립니다!! ㅠㅠ

0

102

2

graphql 백엔드 서버가 포폴용 빼곤 접속이 안됩니다.

0

78

2

_app.js 작성 이후로 에러가 발생하네요

0

95

2

학습자료

0

71

2

학습자료가 안열립니다.

0

50

2

플레이 그라운드 퀴즈 문제 질문이 있습니다.

0

61

0

기존강의 구매자, 업데이트 끝인가요?

0

110

3

업데이트 버전 수강

0

89

2

완벽한 프론트엔드

0

136

2

나만의 쇼핑몰 샘플 페이지 접속 확인부탁드립니다.

0

84

1

graphql 접속이 안됩니다.

0

101

2

const, let 사용 질문 드립니다.

0

70

2

싸이월드 만들기 1탄 피드백 부탁드립니다.

0

122

2

회원가입 과제 피드백 부탁드립니다.

0

81

2

styled.span / styled.input "CSS 자동완성"

0

47

1

쿠폰 발급 관련

0

167

2

서버 502 error

0

247

2

쿠폰 다시 부탁드려도 될가여?

0

140

2

a태그 패딩했을때 왜 크기가 줄어들지 않고 늘어나나요

0

185

2

2분 44초 질문

0

132

3