提交 57f72eac 编写于 作者: L Luis Alvarez D 提交者: Joe Haddad

Add catch all routes example and a link to it in docs (#10202)

* Added example

* Updated readme of the dynamic-routing example

* Updated catch all docs

* Simplified example

* Update examples/catch-all-routes/README.md
Co-Authored-By: NJoe Haddad <joe.haddad@zeit.co>
Co-authored-by: NJoe Haddad <timer150@gmail.com>
上级 e1083f0e
......@@ -58,6 +58,13 @@ Client-side navigations to a dynamic route can be handled with [`next/link`](/do
### Catch all routes
<details>
<summary><b>Examples</b></summary>
<ul>
<li><a href="https://github.com/zeit/next.js/tree/canary/examples/catch-all-routes">Catch All Routes</a></li>
</ul>
</details>
Dynamic routes can be extended to catch all paths by adding three dots (`...`) inside the brackets. For example:
- `pages/post/[...slug].js` matches `/post/a`, but also `post/a/b`, `post/a/b/c` and so on.
......
# Catch All Routes Example
This example shows how to use [Catch all routes](https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes) in Next.js, which allows a dynamic route to catch all paths.
The catch all page is in `pages/post/[...slug]`, it matches any path after `/post`, like the following:
- `/post/first-post`,
- `/post/2020/first-post`
- `/post/2020/first-post/with/catch/all/routes`
- Anything that matches the glob `/post/**`
You can use `next/link` as displayed in this example to route to these pages client side.
## Deploy your own
Deploy the example using [ZEIT Now](https://zeit.co/now):
[![Deploy with ZEIT Now](https://zeit.co/button)](https://zeit.co/new/project?template=https://github.com/zeit/next.js/tree/canary/examples/catch-all-routes)
## How to use
### Using `create-next-app`
Execute [`create-next-app`](https://github.com/zeit/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example:
```bash
npm init next-app --example catch-all-routes catch-all-routes-app
# or
yarn create next-app --example catch-all-routes catch-all-routes-app
```
### Download manually
Download the example:
```bash
curl https://codeload.github.com/zeit/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/catch-all-routes
cd catch-all-routes
```
Install it and run:
```bash
npm install
npm run dev
# or
yarn
yarn dev
```
Deploy it to the cloud with [Now](https://zeit.co/now) ([download](https://zeit.co/download)):
```bash
now
```
import Link from 'next/link'
const Header = () => (
<header>
<ul>
<li>
<Link href="/">
<a>Home</a>
</Link>
</li>
<li>
<Link href="/about">
<a>About</a>
</Link>
</li>
<li>
<Link
href="/post/[...slug]"
as="/post/2020/first-post/with/catch/all/routes"
>
<a>First Post</a>
</Link>
</li>
<li>
<Link
href="/post/[...slug]"
as="/post/2020/second-post/with/catch/all/routes"
>
<a>Second Post</a>
</Link>
</li>
</ul>
</header>
)
export default Header
{
"name": "catch-all-routes",
"version": "1.0.0",
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start"
},
"license": "ISC",
"dependencies": {
"next": "latest",
"react": "^16.12.0",
"react-dom": "^16.12.0"
}
}
import Header from '../components/header'
const About = () => (
<>
<Header />
<h1>About page</h1>
</>
)
export default About
import Header from '../components/header'
const Home = () => (
<>
<Header />
<h1>Hello World!</h1>
</>
)
export default Home
import { useRouter } from 'next/router'
import Header from '../../components/header'
const Comment = () => {
const router = useRouter()
const slug = router.query.slug || []
return (
<>
<Header />
<h1>Slug: {slug.join('/')}</h1>
</>
)
}
export default Comment
# Dynamic Routing example
This example shows usage of dynamic routing.
This example contains two dynamic pages:
This example shows how to do [dynamic routing](https://nextjs.org/docs/routing/dynamic-routes) in Next.js. It contains two dynamic routes:
1. `pages/post/[id]/index.js`
- e.g. matches `/post/my-example` (`/post/:id`)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册