
<link href="이동할주소"> 이동하기 </link>
const router = useRouter()
function 기능(){
router.push("이동할 페이지")
}
return <button onClick={기능}>등록하기</button>
import { useRouter } from "next/navigation"; 이 코드가 생성되고 무언갈 클릭하면 onclick함수로 만들어서 변수.push(이동할 페이지) 실행하면 된다.import { gql, useQuery } from "@apollo/client";
const FETCH_BOARD = gql`
query {
fetchBoard(number: 1) {
number
writer
title
contents
}
}
`;
export default function StaticRoutingMovedPage() {
const { data } = useQuery(FETCH_BOARD);
console.log(data);
return (
<>
<div>1번 게시글 상세페이지 이동이 완료되었습니다.</div>
<div>작성자: {data && data.fetchBoard.writer} </div>
<div>제목: {data?.fetchBoard.title} </div>
<div>내용: {data ? data.fetchBoard.contents : ""} </div>
</>
);
<div>작성자: {data.fetchBoard.writer} </div>
<div>제목: {data.fetchBoard.title} </div>
<div>내용: {data.fetchBoard.contents} </div>
<div>작성자: {data && data.fetchBoard.writer} </div>
<div>제목: {data?.fetchBoard.title} </div>
<div>내용: {data ? data.fetchBoard.contents : ""} </div>
이 부분에서는 데이터를 받아와 화면에 그리게 된다. 하지만 데이터를 받아오기까지 undefined이므로 에러가 발생하게 된다.
이러한 부분을 실행하기 위해 조건부렌더링을 사용한다
data && data.fetchBoard.writer
data ?? data.fetchBoard
data || data.fetchBoard
data ? data.fetchBoard : undefined
data?.fetchBoard
"use client";
import { useRouter } from "next/navigation";
export default function StaticRoutingPage() {
const router = useRouter();
const onClickSubmit1 = () => {
router.push("/section07/07-03-dynamic-routing-board-moved/1");
};
const onClickSubmit2 = () => {
router.push("/section07/07-03-dynamic-routing-board-moved/2");
};
<button onClick={onClickSubmit1}>1번 게시글 등록하기</button>
<br />
<button onClick={onClickSubmit2}>2번 게시글 등록하기</button>
import { gql, useQuery } from "@apollo/client";
import { useParams } from "next/navigation";
const FETCH_BOARD = gql`
query fetchBoard($mynumber: Int) {
fetchBoard(number: $mynumber) {
number
writer
title
contents
like
createdAt
}
}
`;
export default function StaticRoutingMovedPage() {
// 구버전 방식
// const router = useRouter()
// router.push("")
// router.query.qqq
// 신버전 방식
const params = useParams();
const { data } = useQuery(FETCH_BOARD, {
variables: {
mynumber: Number(params.qqq),
},
});
console.log(data);
return (
<>
<div>{params.qqq}번 게시글 상세페이지 이동이 완료되었습니다.</div>
<div>작성자: {data && data.fetchBoard.writer} </div>
<div>제목: {data?.fetchBoard.title} </div>
<div>내용: {data ? data.fetchBoard.contents : ""} </div>
</>
);
}
폴더를 [이름]으로 정한다. 이렇게 폴더를 만들면 폴더가 변수처럼 사용된다.
moved/ 뒤에 1과 2가 있는데 버튼이 클릭되면 그 숫자가 []변수에 담겨 넘어간다.
useParams()를 사용한 URL 파라미터 추출
gql은 GraphQL 쿼리를 정의하기 위한 템플릿 리터럴 태그이다. 여기서는 fetchBoard라는 쿼리를 작성하고, mynumber라는 매개변수를 받습니다.
이 쿼리를 통해 특정 번호(mynumber)의 게시글을 서버에서 가져와 number, writer, title, contents, like, createdAt 등의 데이터를 불러온다.
useQuery는 Apollo Client에서 제공하는 훅으로, GraphQL 쿼리를 실행하고 그 결과를 가져온다. 첫 번째 인자로 FETCH_BOARD 쿼리를 전달하고, 두 번째 인자로는 쿼리에 필요한 변수인 mynumber를 전달한다.
mynumber는 URL에서 추출한 params.qqq 값(게시글 번호)을 숫자로 변환하여 전달한다. useQuery는 data, loading, error 등의 상태를 반환하며, 여기서는 data만 사용하여 데이터를 확인한다.
try {
// 에러가 발생할 수 있는 코드
} catch (error) {
// 에러가 발생했을 때 실행되는 코드
} finally {
try...catch 문은 JavaScript에서 에러가 발생할 수 있는 코드 블록을 실행하고, 에러가 발생했을 때 이를 처리하는 구조이다.
추가적으로 finally 블록을 사용할 수 있다, 에러 발생 여부와 상관없이 항상 실행된다.