- vừa được xem lúc

Routing trong Next.js

1 0 44

Người đăng: Nguyễn Quang Vinh

Theo Viblo Asia

Trước đó bạn có thể đang tò mò về Next.js, vào đây luôn bạn ơi

(go)

1. How Routing works in Next.js

Next.js tự động xử lý tất cả các file với các đuôi .js, .jsx, .ts hoặc .tsx trong cây thư mục như một route.

Một trang trong Next.js là React componentroute dựa trên tên file của nó.

Hãy xem xét cấu trúc thư mục này như một ví dụ:

├── pages
| ├── index.js
| ├── contact.js
| └── my-folder
| ├── about.js
| └── index.js

Đường dẫn tương ứng của 4 page:

index.js nhận url là http://localhost:3000

contact.js nhận url là http://localhost:3000/contact

my-folder/index.js là page sub-folder trong folder chính, nên nhận url http://localhost:3000/my-folder

my-folder/about.js tương tự, thì sẽ nhận url http://localhost:3000/my-folder/about

2. How to link between pages

Theo mặc định, Next.js pre-render mọi trang để làm cho ứng dụng của bạn nhanh và thân thiện với người dùng (tham khảo thêm).

Nó sử dụng Link component được cung cấp bởi next/link để cho phép chuyển đổi giữa các route.

import Link from "next/link" export default function IndexPage() { return ( <div> <Link href="/contact"> <a>My second page</a> </Link> <Link href="/my-folder/about"> <a>My third page</a> </Link> </div> )
}

Trên ví dụ trên, chúng ta hiện có 2 routes

/contact có url http://localhost:3000/contact

/about có url http://localhost:3000/my-folder/about

Link component có thể nhận một số thuộc tính, nhưng chỉ thuộc tính href là bắt buộc.

Ở đây, chúng ta sử dụng thẻ <a></a> làm thành phần con để liên kết các trang.

Ngoài ra, bạn có thể sử dụng bất kỳ phần tử nào hỗ trợ sự kiện onClick trên Link component

3. How to pass route parameters

Next.js cho phép bạn chuyển các params của route và sau đó lấy lại dữ liệu bằng cách sử dụng hook useRouter hoặc getInitialProps.

Nó cung cấp cho bạn quyền truy cập vào route object có chứa các params.

index.js import Link from "next/link" export default function IndexPage() { return ( <Link href={{ pathname: "/about", query: { id: "test" }, }} > <a>About page</a> </Link> )
}

Như bạn có thể thấy ở đây, thay vì nhập string cho thuộc tính href, chúng ta truyền vào một object có chứa thuộc tính pathname.

Đây cũng chính là route, cùng với params truy vấn (query) chứa dữ liệu ({ id: "test"}).

# about.js import { useRouter } from "next/router" export default function AboutPage() { const router = useRouter() const { query: { id }, } = router return <div>About us: {id}</div>
}

Ở đây, chúng tôi import hook useRouter để lấy dữ liệu được truyền vào.

Tiếp theo, chúng tôi lấy dữ liệu đó từ query object bằng cách sử dụng destructuring (tham khảo thêm).

Nếu bạn đang sử dụng server-side rendering, bạn nên sử dụng getInitialProps để lấy dữ liệu.

export default function AboutPage({ id }) { return <div>About us: {id}</div>
} AboutPage.getInitialProps = ({ query: { id } }) => { return { id }
}

3. Dynamic routes

Next.js cho phép bạn xác định các route động trong ứng dụng của mình bằng cách sử dụng dấu ngoặc vuông ([param]).

Thay vì đặt tên tĩnh trên các trang của mình, bạn có thể sử dụng tên động.

Ví dụ:

├── pages
| ├── index.js
| ├── [slug].js
| └── my-folder
| ├── [id].js
| └── index.js

Next.js sẽ lấy các route params được truyền vào và sau đó sử dụng nó làm tên cho route đó

# index.js export default function IndexPage() { return ( <ul> <li> <Link href="/"> <a>Home</a> </Link> </li> <li> <Link href="/[slug]" as="/my-slug"> <a>First Route</a> </Link> </li> <li> <Link href="/my-folder/[id]" as="/my-folder/my-id"> <a>Second Route</a> </Link> </li> </ul> )
}

Ở đây, chúng ta phải xác định giá trị trên thuộc tính as vì đường dẫn là động.

Tên của route sẽ là bất cứ điều gì bạn đặt trên as prop.

# [slug].js import { useRouter } from "next/router" export default function DynamicPage() { const router = useRouter() const { query: { id }, } = router return <div>The dynamic route is {id}</div>
}

Bạn cũng có thể lấy các route params bằng hook useRouter trên client hoặc getInitialProps trên server.

# my-folder/[id].js export default function MyDynamicPage({ example }) { return <div>My example is {example}</div>
} MyDynamicPage.getInitialProps = ({ query: { example } }) => { return { example }
}

Ở ví dụ trên, chúng ta đã sử dụng getInitialProps để lấy route động.

4. Dynamic nested routes

Với Next.js, bạn cũng có thể có route động lồng nhau (nested) cùng với các bằng dấu ngoặc vuông ([param])

Hãy xem xét cấu trúc thư mục này:

├── pages
| ├── index.js
| └── [dynamic]
| └── [id].js
# index.js export default function IndexPage() { return ( <ul> <li> <Link href="/"> <a>Home</a> </Link> </li> <li> <Link href="/[dynamic]/[id]" as="/my-folder/my-id"> <a>Dynamic nested Route</a> </Link> </li> </ul> )
}

Như bạn có thể thấy ở đây, chúng ta đặt các giá trị động vào thuộc tính as như đã làm trong ví dụ trước.

Nhưng lần này, chúng ta phải xác định tên của folderfile của nó.

import { useRouter } from "next/router" export default function DynamicPage() { const router = useRouter() const { query: { dynamic, id }, } = router return ( <div> Data: {dynamic} - {id} </div> )
}

Cuối cùng, như các ví dụ trên, để lấy ra các query object, chúng ta sử dụng hook useRouter.

5. Kết luận

Trên là những tìm hiểu của mình về route trong Next.js, hi vọng giúp ích được cho mọi người

Thanks for watching !!!

6. Tài liệu tham khảo

Object and array destructuring

Next.js pre-render

Tại sao bạn nên tìm hiểu Next.js

Next routing

Next route for beginer

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 136

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 117

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 93

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 229