list.tsx 코드
import { connectDB } from '@/util/database';
import Link from 'next/link'
const page = async() => {
let result = await (await connectDB).db("forum").collection('post').find().toArray();
console.log(result);
return (
<div className="list-bg">
{result.map((item:{_id:string,title:string,content:string})=>(
<Link href={`/detail/${item._id}`} key={item._id}>
<div className="list-item" >
<h4>{item.title}</h4>
<p>{item.content}</p>
</div>
</Link>
))}
</div>
);
};
export default page;
#위에서는 item._id 이나 문자로 안나올경우 item._id.toString() 이렇게 써주면된다
다이나믹 라우터
경로 폴더를 하나 만들고 (현재는 itemPage 폴더)
그안에 [아무제목] 이렇게 폴더를 만들고 그안에 page.tsx 를 만들면 [] 이게 다이나믹 라우터가 되는것이다.
위쪽 코드 리스트에서 Link 태그에 게시글의 아이디를 보내주어서. 받는 방법이있다.
props 를 받아서 params 파람스를 보여준다.
import { connectDB } from '@/util/database';
import { ObjectId } from 'mongodb';
const page = async(props:any) => {
let result = await (await connectDB).db("forum").collection('post').findOne({_id:new ObjectId(props.params.itemPage)})
console.log(props.params.itemPage)
return (
<div>
<h4>상세페이지</h4>
<h4>{result.title}</h4>
<p>{result.content}</p>
</div>
);
};
export default page;
useRouter 사용법 // 클라이언트 컴포넌트 에서만 사용가능 'use client'
import { useRouter } from "next/navigation";
추가후에
const DetaiLink = () => {
let router = useRouter()
return (
<button onClick={()=>{router.push('/list')}}>
버튼
</button>
);
};
이런식으로 사용한다.
router.back() = 뒤로가기
router.forward() = 앞으로가기
router.refresh() = 새로고침 (전체 새로고침이 아니라 변동이 있는 일부분만 새로고침 해줌.)
router.prefetch('/detail/dsds') = 페이지에 필요한 파일들을 미리 로드 시켜둠(페이지 이동은아님) (Link 태그는 기능자체로 있다 Link 태그 보이는곳에서 프리패치함.)
링크태그 프리패치 기능끄기
<Link prefetch={false}></Link>
현재 url 출력
let a = usePathname()
현재 서치파람스트리 전부출력 = url 다이나믹 라우터 입력한거 출력은 useParams()
let b = useSearchParams()
#정리
1. 여러페이지 만들려면 [ 다이나믹 라우터 ]
2. 현재 url 이 뭔지 궁금하면 props/useRouter
3. 페이지이동, prefetch 등은 useRouter
'Next' 카테고리의 다른 글
next13 게시판 글 작성기능 만들기 2 (1) | 2023.06.13 |
---|---|
next.13 게시판 글 작성기능 만들기 (0) | 2023.06.07 |
하나의 useState 이용한 숫자변경. (각자따로.) (0) | 2023.05.26 |
Next 13 컴포넌트에 데이터를 전해주려면 props (0) | 2023.05.25 |
component 만드는법 2가지 (0) | 2023.05.25 |