페이지 이동
정적라우팅과 동적라우팅이 있다.
페이지마다 번호를 경로처럼 정해 이동함
게시물 수만큼 폴더 & 파일(index.js)를 만들어줘야함
ex) /board/페이지번호 로 폴더 만들고 이동
import { useRouter } from 'next/router'
export default function staticRoutingPage(){
const router = useRouter()
const onClickMove = () =>{
router.push("/05-02-static-routed")
}
return (
<button onClick={onClickMove}>페이지 이동하기</button>
)
}
변수에 값을 받아서 페이지 이동.
폴더와 파일(index.js)은 하나, 이름은 반드시 대괄호로 묶어줘야함 -> 변수가 됨 router.query에 들어있음
하나의 페이지가 동적으로 바뀌게!
주소는 꼭 페이지 수가 아니어도 됨.
ex) /board/banana
// import axios from 'axios'
import { useMutation, gql } from '@apollo/client'
import { useRouter } from 'next/router'
import { useState } from 'react'
const CREAT_BOARD = gql`
mutation mymutation
($writer: String, $title:String , $contents: String){
createBoard(writer:$writer, title:$title, contents:$contents){
_id
number
message
}
}
`
export default function GraphqlMutationPage(){
const router = useRouter()
const [data, setData] = useState("")
const [writer, setWriter] = useState("")
const [title, setTitle] = useState("")
const [contents, setContents] = useState("")
const [callApi] = useMutation(CREAT_BOARD)
const callGraphqlAPI = async () => {
//가져오기를 시도하는 것
try{
const result = await callApi({
variables: { writer: writer, title: title, contents: contents },
}); //try는여기서 실패하면 catch로 점프한다.
console.log(result);
setData(result.data.createBoard.message);
alert("게시글 등록 성공!");
alert("상세페이지로 이동할까요?");
// 백틱안에 쓸땐 ${변수}로 사용한다. 템플릿 리터럴
router.push(`/05-08-dynamic-routed-input/${result.data.createBoard.number}`)
}catch(error){
alert(error.message)
}
}
//finally{
// //성공이든 실패든 여기 finally는 실행 : 로그남김(데이터분석에 쓰임)
// }
const onChangeWriter = (event) => {
setWriter(event.target.value)
}
const onChangeTitle = (event) => {
setTitle(event.target.value)
}
const onChangeContents = (event) => {
setContents(event.target.value)
}
return (
<div>
{/* <div>{data}</div> */}
작성자 : <input type={"text"} onChange={onChangeWriter} />
<br />
제목 : <input type={"text"} onChange={onChangeTitle} />
<br />
내용 : <input type={"text"} onChange={onChangeContents} />
<br />
{data}
<br />
<button onClick={callGraphqlAPI}>GRAPHQL_API요청하기!</button>
</div>
);
}
/05-08-dynamic-routed-input/${result.data.createBoard.number}
)import { useQuery } from "@apollo/client";
import { gql } from "@apollo/client";
import { useRouter } from "next/router";
const FETCH_BOARD = gql`
query fetchBoard($number: Int) {
fetchBoard(number: $number) {
number
writer
title
contents
}
}
`;
export default function staticRoutedPage() {
const router = useRouter()
const { data } = useQuery(FETCH_BOARD, {
variables: { number: Number(router.query.number) },
});
console.log(data);
return (
<div>
{/* 조건부 렌더링 : 전체 다 받을때까지 시간이 걸리므로 먼저 보여줄 수 있는 것 먼저 보여줌*/}
{/* 물음표쓰는 것 optionl-chainning - 내용은 렌더링이랑 같음 */}
<div>{data?.fetchBoard.number}번 게시글에 오셨네요.</div>
<div>작성자 : {data?.fetchBoard.writer}</div>
<div>제목 : {data?.fetchBoard.title}</div>
<div>내용 : {data?.fetchBoard.contents}</div>
</div>
);
}