åçã«ãŒãã£ã³ã°ïŒURLã¹ã©ãã°ãŸãã¯ããªãã£/ã¯ãªãŒã³URLãšãåŒã°ããŸãïŒã¯ãNext.jsã§é·ãéèŠæ±ãããŠããæ©èœã§ãã
çŸåšã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ã L7ãããã·ãã«ã¹ã¿ã ãµãŒããŒããŸãã¯ãŠãŒã¶ãŒã©ã³ãããã«ãŠã§ã¢ãã¢ããªã±ãŒã·ã§ã³ã®åã«é 眮ããŸãã ãããã®ãœãªã¥ãŒã·ã§ã³ã¯ã©ãããååã«äººéå·¥åŠã«åºã¥ããéçºè ãšã¯ã¹ããªãšã³ã¹ãæäŸããŸããã
ããã«ãã«ã¹ã¿ã ãµãŒããŒã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒã¯ãããŒãžããšã®ãµãŒããŒã¬ã¹æ©èœãªã©ã®é«åºŠãªãã¬ãŒã ã¯ãŒã¯ã¬ãã«ã®æ©èœã誀ã£ãŠãªããã¢ãŠãããŸãã
/blog/:post
ããµããŒãããããã®ã«ã¹ã¿ã ãµãŒããŒã®å¿
èŠæ§ãæé€ããŸã<Link />
ã«ãŒãé·ç§»ãæ€èšŒããŸãNext.jsã¯ã URLã»ã°ã¡ã³ãäžèŽããååä»ãURLãã©ã¡ãŒã¿ãŒããµããŒãããå¿ èŠããã
[]
ã©ããããããã¡ã€ã«åãŸãã¯ãã£ã¬ã¯ããªåã¯ãååä»ããã©ã¡ãŒã¿ãšèŠãªãããŸãquery
ãªããžã§ã¯ãã«ããŒãžãããŸãïŒ getInitialProps
ãŸãã¯router
ããwithRouter
çµç±ã§ã¢ã¯ã»ã¹å¯èœïŒâãããã®ãã©ã¡ãŒã¿ã¯ã¯ãšãªãã©ã¡ãŒã¿ã§äžæžãã§ããŸãããã®ææ¡ãç解ããããããããã«ã次ã®ãã¡ã€ã«ããªãŒã調ã¹ãŠã¿ãŸãããã
pages/
âââ [root].js
âââ blog/
â âââ [id].js
âââ customers/
â âââ [customer]/
â â âââ [post].js
â â âââ index.js
â â âââ profile.js
â âââ index.js
â âââ new.js
âââ index.js
âââ terms.js
Next.jsã¯ã次ã®é åºã§ç»é²ããã次ã®ã«ãŒããçæããŸãã
;[
{ path: '/', page: '/index.js' },
{ path: '/blog/:id', page: '/blog/[id].js' },
{ path: '/customers', page: '/customers/index.js' },
{ path: '/customers/new', page: '/customers/new.js' },
{ path: '/customers/:customer', page: '/customers/[customer]/index.js' },
{
path: '/customers/:customer/profile',
page: '/customers/[customer]/profile.js',
},
{ path: '/customers/:customer/:post', page: '/customers/[customer]/[post].js' },
{ path: '/terms', page: '/terms.js' },
{ path: '/:root', page: '/[root].js' },
]
ãããã®äŸã¯ãã¹ãŠããã¡ã€ã«åãpages/blog/[id].js
ããŒãžãæ³å®ããŠããŸãã
<Link />
ããŒãžã«ç§»åãã<Link href="/blog/[id]" as="/blog/how-to-use-dynamic-routes">
<a>
Next.js: Dynamic Routing{' '}
<span role="img" aria-label="Party Popper">
ð
</span>
</a>
</Link>
äžèšã®äŸã§ã¯ã /blog/[id].js
ããŒãžã«ç§»è¡ãã次ã®query
ãªããžã§ã¯ãã_Router_ã«æäŸããŸãã
{
id: 'how-to-use-dynamic-routes'
}
import { useRouter } from 'next/router'
function BlogPost() {
const router = useRouter()
// `blogId` will be `'how-to-use-dynamic-routes'` when rendering
// `/blog/how-to-use-dynamic-routes`
const blogId = router.query.id
return <main>This is blog post {blogId}.</main>
}
export default BlogPost
æ³šïŒ withRouter
䜿çšããããšãã§ããŸãã
getInitialProps
ååä»ããã©ã¡ãŒã¿ãŒã®èªã¿åãfunction BlogPost({ blogText }) {
return <main>{blogText}</main>
}
BlogPost.getInitialProps = async function({ query }) {
// `blogId` will be `'how-to-use-dynamic-routes'` when rendering
// `/blog/how-to-use-dynamic-routes`
const blogId = query.id
const { text } = await fetch(
'/api/blog/content?id=' + encodeURIComponent(blogId)
).then(res => res.json())
return { blogText: text }
}
export default BlogPost
ãã©ã¡ãŒã¿ããŒãžã§ã³ããšã¯ã¹ããŒãããã¹ã¿ãããŒãžãäœæããããšã«ããããªãã·ã§ã³ã®ã«ãŒããã©ã¡ãŒã¿ããšãã¥ã¬ãŒãã§ããŸãïŒãŸãã¯ãã®éïŒã ããã«ããããã¡ã€ã«ã·ã¹ãã ãæ€æ»ãããšãã«ã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãã®å¯èŠæ§ãé«ãŸããŸãã
// pages/blog/comments.js
// (the optional version of `pages/blog/[id]/comments.js`)
export { default } from './[id]/comments.js'
ããã¯ã blog-[id].js
ãšããååã®ããŒãžã_æåéã_解éããã /blog-1
ãšäžèŽããªãããšãæå³ããŸãã ããŒãžã/blog/[id].js
åæ§ç¯ããããURLã»ã°ã¡ã³ãå
šäœãååä»ããã©ã¡ãŒã¿ãŒã«å€æããŠãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã§blog-
åé€ãåŠçããããšãã§ããŸãã
[]
代ããã«_ããã«èšå·ãæ¿å
¥_ããŠURLã¹ã©ãã°ã瀺ããŸããã¡ã€ã«ã·ã¹ãã äžã®ååä»ããã©ã¡ãŒã¿ãè¡šãããã«äœ¿çšã§ããã·ã³ãã«ã¯:name
ïŒãå®çŸ©ããæãããç¥ãããŠããæ¹æ³ã¯ãæå¹ãªãã¡ã€ã«åã§ã¯ãã
å
è¡æè¡ã調æ»ããŠããéããã©ã¡ãŒã¿ã瀺ãããã«äœ¿çšãããæãäžè¬çãªèšå·ã¯ã _
ã $
ãããã³[]
ã
_
ã¯éåžžããããªãã¯ã«ã«ãŒãã£ã³ã°ã§ããªãå
éšã«ãŒãã瀺ããŠããããã _
ãé€å€ããŸããïŒäŸïŒ _app
ã _document
ã /_src
ã /_logs
ïŒã
ãŸãã $
ã¯ãã©ã¡ãŒã¿ãŒæ¡åŒµã®bashã®å°ç« ã§ãããããé€å€ããŸããã
path-to-regexp
ã掻çšããæ£èŠè¡šçŸãè¡šãããã«å¿ èŠãªèšå·ã®ã»ãšãã©ã¯ãæå¹ãªãã¡ã€ã«åã§ã¯ãã
å°æ¥çã«ã¯ã next.config.js
ãªã©ã§å®çŸ©ãããpath-to-regexp
ã«ãŒããèš±å¯ããå¯èœæ§ããããŸãã ããã¯çŸåšããã®ææ¡ã®ç¯å²å€ã§ãã
å°æ¥çã«ã¯ããã£ãããªãŒã«ãã©ã¡ãŒã¿ã®è¿œå ãæ€èšããå¯èœæ§ããããŸãã ãããŸã§ã®ãšããããã£ãŠããããšã§ããããããã®ãã©ã¡ãŒã¿ã¯URLã®%
ã䜿çšããå¯èœæ§ããããŸãïŒäŸïŒ pages/website-builder/[customerName]/%.tsx
ïŒã
æ祚ïŒãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã«é¢å¿ã瀺ãã«ã¯ããã®ã³ã¡ã³ãã«ã+1ããä»ããŠãã ããã
泚ïŒãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã¯ããã®RFCã§ãã§ã«äœ¿çšå¯èœã§ãããæ瀺çãªæ§æããªãã ãã§ãïŒãèŠåãã»ã¯ã·ã§ã³ãåç §ïŒã
æ祚ïŒãã£ãããªãŒã«ãã©ã¡ãŒã¿ãžã®é¢å¿ãè¡šæããã«ã¯ããã®ã³ã¡ã³ãã®ã+1ãã«åå¿ããŠãã ããã
泚ïŒãã®ã¹ã¬ããã®ãã£ãããªãŒã«ãã©ã¡ãŒã¿ã®ãŠãŒã¹ã±ãŒã¹ãå ±æããŠãã ããïŒ åé¡ç©ºéããã£ãšç解ããããšæããŸãã
äºçŽæžã¿3
ricardo.chã§ã¯ãåã«ãŒãã«ãã±ãŒã«ãã¬ãã£ãã¯ã¹ã䜿çšããŠãããããã«ãŒãã£ã³ã°ãå°ãè€éã«ãªã£ãŠããŸãã
æå¹ãªã«ãŒãã®äŸïŒ
/
-èªåæ€åºããããã±ãŒã«ã®ããŒã ããŒãž/:locale
-匷å¶ãã±ãŒã«ã®ããŒã ããŒãž/:locale/search
-æ€çŽ¢ããŒãž/:locale/article/:id
-èšäºããŒãžãã®ãããªãã¬ãã£ãã¯ã¹ãã©ã¡ãŒã¿ããµããŒãã§ãããšæããŸããïŒ
çŸæç¹ã§ã¯ã httpsïŒ//www.npmjs.com/package/next-routesã䜿çšããŠã
å¥ã®ããšïŒèšäºããŒãžã§ã¯ã /de/article/example-article-123
ãããªIDã®åã®ã¹ã©ãã°ããµããŒãããŠããŸããIDã¯123ã§ããããã¯ã next-routes
ã䜿çšããŠéåžžã«è€éãªæ£èŠè¡šçŸãä»ããŠè¡ãããŸãããç§ã¯ãµããŒãããŠããŸãããããããã¡ã€ã«ã·ã¹ãã APIã§ã©ã®ããã«è¡šçŸã§ããããã芧ãã ããã
@ValentinHæäŸãããã«ãŒãã¯ããã¡ã€ã«ã·ã¹ãã APIã䜿çšããŠãã¹ãŠå¯èœã§ã-æäŸãããã«ãŒããäžããããå ŽåïŒ
/
=> pages/index.js
/:locale
=> pages/$locale/index.js
/:locale/search
=> pages/$locale/search.js
/:locale/article/:id
=> pages/$locale/article/$id.js
/ de / article / example-article-123ã®ãããªIDã®åã®ã¹ã©ãã°ããµããŒãããŸããIDã¯123ã«ãªããŸãã
ãã®ãŠãŒã¹ã±ãŒã¹ã¯äžèšã®ãšããã§ãã
ååä»ããã©ã¡ãŒã¿ãã«ãŒãåã®éäžã«è¡šç€ºããããšã¯ã§ããŸããã
ããã¯ã
blog-$id.js
ãšããååã®ããŒãžãæåéãã«è§£éããã/blog-1
ãšäžèŽããªãããšãæå³ããŸãã ããŒãžã/blog/$id.js
åæ§ç¯ããããURLã»ã°ã¡ã³ãå šäœãååä»ããã©ã¡ãŒã¿ãŒã«å€æããŠãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã§blog-
åé€ãåŠçããããšãã§ããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ããªãã®ããŒãºãæºãããŠããŸãããïŒ ç¹å®ã®èŠä»¶ã«ã€ããŠè©³ããç¥ããããšæããŸãã
çããŠãããŠããããšãã
$locale/index.js
ãã©ã«ããšãã¡ã€ã«ã®äž¡æ¹ãšããŠäœ¿çšããããšã¯èããŠããŸããã§ãããããã¯æ¬åœã«çŽ æŽãããã§ãïŒ
ãçãäžã®ååä»ããã©ã¡ãŒã¿ãŒãã«ã€ããŠã¯ãã¹ã©ãã°ãåçã«ããã®ã¯éããšæã£ãã®ã§èŠèœãšããŠããŸããã ããããããªãã¯å®å šã«æ£ããã§ãããããŠããã¯ããªããèšåãã段èœã«ãã£ãŠæ±ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®ã¹ã©ãã°ãã¹ãã©ã€ãã³ã°ããã®ãéã§ãð
ãã®ãããªãã®ïŒ.hidden .files / .foldersããã®ãã©ã¡ãŒã¿ãŒã®è§£æïŒã¯å¯èœã§ããããïŒ
pages/ âââ .root.js âââ blog/ â âââ .id/ â â âââ index.js â â âââ comments.js <-- optional? âââ customers/ â âââ .customer/ â â âââ .post/ â â â âââ index.js â â âââ index.js â â âââ profile.js â âââ index.js â âââ new.js âââ index.js âââ terms.js
ãŸãã¯ããã¡ã€ã«ãèŠã€ããããšãã§ããããã«$ãæ®ããŸãïŒDãããã©ã¡ãŒã¿ã瀺ãããã«åžžã«$ folderã䜿çšããŸããïŒ
pages/ âââ $root.js âââ blog/ â âââ $id/ â â âââ index.js â â âââ comments.js <-- optional? âââ customers/ â âââ $customer/ â â âââ $post/ â â â âââ index.js â â âââ index.js â â âââ profile.js â âââ index.js â âââ new.js âââ index.js âââ terms.js
以åã¯ãnpmããã±ãŒãžã§åäœããã¢ããªã®ãªãã·ã§ã³ãã©ã¡ãŒã¿ãŒã«ãã®ãŠãŒã¹ã±ãŒã¹ããããŸããã ãããã¯ãªãã·ã§ã³ã§ã¹ã³ãŒããæã€ããšãã§ããŸãã 次ã®ãããªã«ãŒãããããŸãã
/packages/express
/packages/express/dependencies
/packages/@babel/core
/packages/@babel/core/dependencies
ãããã£ãŠãåºæ¬çã«ãscopeãã©ã¡ãŒã¿ãŒã¯ãªãã·ã§ã³ã§ããã @
ã§å§ãŸãå Žåã®ã¹ã³ãŒãã§ããããŸãã
ãããã£ãŠã /packages/express/dependencies
ãš/packages/@babel/core
ã®ã»ã°ã¡ã³ãæ°ã¯åãã§ããã1ã€ã®ã±ãŒã¹ã§ã¯express
ã®/dependencies
ã§ãããä»ã®ã±ãŒã¹ã§ã¯/index
@babel/core
ã
æçµçã«ã次ã®ã«ãŒãã§react-router
ã§è§£æ±ºãããŸããã
<Switch>
<Route path={`/packages/`} exact component={PackagesOverview} />
<Route path={`/packages/:name(@[^/]+/[^/]+)`} component={PackageView} />
<Route path={`/packages/:name`} component={PackageView} />
</Switch>
ãã®RFCã§ãã®ãŠãŒã¹ã±ãŒã¹ã®è§£æ±ºçãèŠããããã©ããã¯ããããŸããã
ãã£ãããªãŒã«ã®ãŠãŒã¹ã±ãŒã¹ã«ã€ããŠã¯ããã©ã«ããŒæ§é ãããªãŒãã¥ãŒãããªãŒããããªã©ãååž°çã«ãã¹ããããããŒã¿ãžã®ãã£ãŒããªã³ã¯ãèããŠããŸãã
ç§ã®2ã»ã³ãïŒãã¡ã€ã«åã®ãã«èšå·ã¯ãã·ã§ã«ã«ãã£ãŠå°ç« ãšããŠäœ¿çšããããããæªãèãã§ãã rm $root.js
ãå®è¡ããããšããŠãã人ã
ãæ··ä¹±ãããã§ãããã ã¢ã³ããŒã¹ã³ã¢ã¯ãŸãšããªéžæè¢ã®ããã§ãã
ãã£ãšåºãïŒå€ãã®äººã®ããã«ãç§ã¯éå»ã«ããã«å¯Ÿãã解決çãšããŠãã¡ã€ã«ã·ã¹ãã ã掻çšããããšããŸããã æçµçã«ããã¡ã€ã«ã·ã¹ãã ãããªããæ¢ããŠããå®å šãªè¡šçŸåãæäŸããããšã¯æ±ºããŠãªãã ãããšæããŸãã ããšãã°ã宣èšåã«ãŒã¿ãŒã§ã¯éåžžãåçãã©ã¡ãŒã¿ãŒã®æ€èšŒãã¿ãŒã³ãæå®ã§ããŸãã ãã®å Žåãã¹ããŒãã®äžéšã¯ãã¡ã€ã«ã·ã¹ãã äžã«ãããå¥ã®éšåã¯ã³ãŒãå ã«ãããŸãã é¢å¿ã®åé¢ã¯è¯ãããšã§ããããã®å Žåãããã¯äœãããæè¡çãªå¶éã§ãã
@ValentinHãšåæ§ã«ã$ locale varã䜿çšããŸãããããã¯ãªãã·ã§ã³ã§ãã
/page.tsãš/page/$locale/page.tsã䜿çšããå¿ èŠããããŸããïŒ
ãããã©ã«ãããã±ãŒã«ãŸãã¯äºåå®çŸ©ããããã±ãŒã«ïŒãŠãŒã¶ãŒèšå®ïŒã䜿çšã§ããããããã®ãããªå Žåã¯$ localeãã©ã¡ãŒã¿ãŒã䜿çšããŸããã
ãããããã£ãšå€ãã®ãŠãŒã¹ã±ãŒã¹ããããŸãïŒ/ car / search / $ optional-filter-1 / $ optional-filter-2 / $ optional-filter-3
ãªãã·ã§ã³ãã£ã«ã¿ãŒ1ïŒã«ã©ãŒã¬ããããªãã·ã§ã³ãã£ã«ã¿ãŒ2ïŒãã©ã³ããã©ãŒããªã©ã
ãŸãããªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã®å Žåã/ $ required-param /ã/ $$ optional-param /ã®ãããªãã®ã§ããïŒ
ãããããŒããããã«ç»å Žããã®ã¯çŽ æŽãããããšã§ãïŒ
@timdpããµããŒãããããã«ãã£ã€ã ãtouch $file
ããã§ããªãå Žåãããã¯å€ãã®æ··ä¹±ã«ã€ãªãããŸãã ããªãã¯ãã¹ãŠã®çžäºäœçšã§éããããšãèŠããŠããå¿
èŠããããŸãã touch \$file; vim $file
ã¯ãã¡ã€ã«ãªãã§vimãéããŸãïŒ$ fileã¯å®çŸ©ãããå€æ°ã§ã¯ãªãããïŒã
åæ§ã«ãã·ã§ã«ã®ã¿ãè£å®ã§ã¯ãã¹ãŠã®å€æ°ãäžèŠ§è¡šç€ºãããåã³æ··ä¹±ãçããŸãã
ç§ã¯ãé©åãªé¢é£ä»ããæäŸããã·ã§ã«ã§æ©èœããå¿ èŠããããšæã2ã€ã®ä»£æ¿æ¡ãææ¡ããŠããŸãã
=
=customer
å Žåã¯page is a customer
ãšèªã¿åãããšãã§ããŸãã ã¡ããã©äŒžã°ãããã³ãã³ã§ããããã«ç²Ÿç¥çã«æªããããšããã§ããŸãããããã£ãŠãååä»ããã©ã¡ãŒã¿ãŒã®æãäžè¬çãªåœ¢åŒã«äŒŒãŠããŸãã@
ãããçšåºŠèªã¿ãããã®ã§ã a customer
for @customer
å¥ã®ãªãã·ã§ã³ã¯ãäžæ¬åŒ§ã䜿çšããããšã§ãïŒäžéšã®ãã¡ã€ã«ã·ã¹ãã ã§äºçŽæåã§ããå Žåãé€ãïŒã ãã®ãã©ã¡ãŒã¿æ§æããå è¡æè¡ãã§ãããä»ã®å€ãã®ã«ãŒã¿ãŒã§äœ¿çšãããŠããŸãã
pages/
âââ {root}.js
âââ blog/
â âââ {id}.js
âââ customers/
â âââ {customer}/
â â âââ {post}.js
â â âââ index.js
â â âââ profile.js
â âââ index.js
â âââ new.js
âââ index.js
âââ terms.js
ããã«ããããã©ã¡ãŒã¿ãã©ãããå§ãŸãã©ãã§çµããããæ確ã«ãªããããã«ãŒãã»ã°ã¡ã³ãã®äžå€®ã«ãã©ã¡ãŒã¿ãé
眮ããã»ã°ã¡ã³ãããšã«è€æ°ã®ãã©ã¡ãŒã¿ãèšå®ã§ããŸãïŒäŸïŒ /product-{productId}-{productColor}
ã
ãã€ãããã¯ã«ãŒããNext.jsã«ãã£ãŠããã®ã¯ãšãŠãè奮ããŠããŸãïŒ
ååä»ããã©ã¡ãŒã¿ãŒã®æ§æã«é¢ããŠãããã¯Spectrumã§èª¬æãããŠãããã®ã§ãïŒ https ïŒ [brackets]
ã䜿çšããŠãããè¡ã£ãŠããæ¹æ³ã奜ãã§ãã ããã¯ãNuxtãããŒãžã§ã³3ã§å®è£
ããããšããŠããããšã§ããããŸããç°ãªããã¬ãŒã ã¯ãŒã¯ã§åçãã¡ã€ã«ã·ã¹ãã ããŒã¹ã®ã«ãŒãã«åã圢åŒã䜿çšããããšã¯è¯ãããšã®ããã«æããŸãã
<Link />
ã®äœ¿çšæ³ã«é¢ããŠãéçºè
ã¯href
as
å±æ§ãšhref
å±æ§ã«ãããŒãžãããããšã¯ãé倧ãªå€æŽãããããããäžå¯èœã ãšæããŸããããããšã¬ã¬ã³ããªæ¹æ³ã§è§£æ±ºã§ãããšæããŸãã
æ®å¿µãªãããäžæ¬åŒ§ã¯ã³ãã³ããã°ã«ãŒãåããããã«Bashã«ãã£ãŠäœ¿çšãããŸãã
<Link />
䜿çšã«é¢ããŠ@ stephan281094ã«åæããŸããããã¯ééãã®åå ã«ãªããŸãã
åçã«ãŒãã£ã³ã°ã¯éåžžã«äŸ¿å©ãªæ©èœãªã®ã§ãçãããããã調ã¹ãŠè§£æ±ºçã巚倧ãªå°éå ·ãæãã€ããã®ã¯æ¬åœã«çŽ æŽãããããšã§ãïŒ
ãã®ãããã¯ã«ã€ããŠã¯ãã¯ã€ã«ãã«ãŒãã«ãŒããææ¡ã«è¿œå ãã䟡å€ããããŸãã å°æ¥çã«èª¿æ»ãããã®ãšããŠãã£ãããªãŒã«ãã©ã¡ãŒã¿ã«ã€ããŠèšåããŸããããNåã®ã¬ãã«ãæã€å¯èœæ§ã®ãã/category/*
ãããªããšãå®è¡ãããå Žåã¯ããã¹ãŠãã«ããŒããŠããŸããã category
ããŒãžãã¬ã³ããªã³ã°ããŸãã
:
å®å
šã«äœ¿çšããããšã¯å¯èœã§ããïŒ ãããããªããããã¯ç§ã®æ祚ã§ãããªããªãã誰ãããã§ã«ãšã¯ã¹ãã¬ã¹ãããã®æ
£ç¿ã«ç²ŸéããŠããããã§ãã
$
ãã·ã§ã«å€æ°ãšç«¶åãããããç§ã¯å人çã«åŒ·ãå察ããŸãã
:
å®å šã«äœ¿çšããããšã¯å¯èœã§ããïŒ ãããããªããããã¯ç§ã®æ祚ã§ãããªããªãã誰ãããã§ã«ãšã¯ã¹ãã¬ã¹ãããã®æ £ç¿ã«ç²ŸéããŠããããã§ãã
ã©ããã:
ã¯Windowsã§çŠæ¢ãããŠããæåãªã®ã§ãããããå®å
šã§ã¯ãããŸããã URLã§ã¢ã³ããŒã¹ã³ã¢ã䜿çšã§ããããã _
䜿çšããããšãçæ³çã§ã¯ãããŸããã [brackets]
ãè¯ã解決çã ãšæãçç±ã¯ããããããå°æ¥ã®èšŒæ ã ããã§ãã Next.jsãå°æ¥post-12345
ãããªã«ãŒãããµããŒããããå Žåããã®æ§æã䜿çšãããšãé倧ãªå€æŽãå ããããšãªãå®è¡ã§ããŸãã
ãããã£ãŠãé¿ããã¹ãæåã®ãªã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
:
ã *
ã "
ã <
ã >
ã |
$
{
ã }
ä»ã«äœãïŒ
ããã¯ãããã€ãã®çç±ã§äžå åãããã«ãŒããã¡ã€ã«ãæã€å¿ èŠæ§ãæé€ãããã®ã§ã¯ãããŸããã
ãŸãã次ã®çç±ã§ããŒãžãã©ã«ããçæããŸãã
index.js
ééããªãäžæã§ã¯ãªãã edit
ããã«è€æ°ã®å
±éã»ã°ã¡ã³ããããå ŽæããããŸããåºæ¬çã«ãç§ãã¡ã®ãã¿ãŒã³ã¯ãéäžã«ãŒãæ§æã䜿çšããŠããŒãžãã©ã«ããŒãçæããããšã§ãããã®ãã©ã«ããŒã«ã¯ãã³ãŒãããŒã¹ã®ä»ã®å Žæããã¢ãžã¥ãŒã«ãã€ã³ããŒã/ãšã¯ã¹ããŒãããã ãã®ãã¡ã€ã«ãå«ãŸããŠããŸãã
ãã®ããã«ãç§ã®çŠç¹ã¯ããã®ææ¡ãæ¢åã®ããŒãžçæããã»ã¹ã®æ¡åŒµåºå圢åŒãšããŠåçŽã«æ©èœããå°ãªããšãã«ã¹ã¿ã ãµãŒããŒãå¿ èŠãšããªããšããå©ç¹ãåŸãããšãã§ãããã©ããã«ãããŸãã
ä»ã®å Žæã§ããã€ãã®ãŠãŒã¹ã±ãŒã¹ã確èªããŸããïŒ https ïŒ
ç§ãèŠãŠããªãäž»ãªããšã¯ããã¡ã€ã«ã·ã¹ãã ã§è¡šçŸãããŠããªãæé»ã®ãã©ã¡ãŒã¿ãŒïŒURLãªãŒããŒã©ã€ããªã©ïŒããµããŒãããŠããããšã§ãã
次ã®ãããªURLããããšããŸãã
/some-vanity-url/
çŸåšã®Next.jsã®çšèªã§ã¯ã Product.js?id=foo&language=en
ããã€ãã®ã¯ãšãªãã©ã¡ãŒã¿ãŒã䜿çšããŠè£œåããŒãžã«ãããããå¿
èŠããããŸãã
åæ§ã«ãåœç€Ÿã®Webãµã€ãã§ã¯ãã»ãšãã©ã®åœã®ããµã€ããããããã¬ãã«ã®ã»ã°ã¡ã³ãïŒ es
ãie
ãªã©ïŒã«ãã£ãŠã¹ã³ãŒããããŠããŸããã gb
ãµã€ãã¯ãã®ã»ã°ã¡ã³ããªãã§ããŠã³ããããŠããŸãã ããã¯ããã¹ãŠã®gbããŒãžã«æé»ã®country
ãã©ã¡ãŒã¿ãŒãããã®ã«å¯Ÿããä»ã®ãã¹ãŠã®åœã§ã¯æ瀺çã§ããããšãæå³ããŸãã
ãã1ã€ã®æ¬ ç¹ã¯ããã®å ŽåãåããããŒãžããURLã¢ãŒããã¯ãã£ã®è€æ°ã®ããŠã³ããã€ã³ãã«ååšããå¯èœæ§ããããããå®éãããå€ãã®ãã³ãã«ïŒã€ãŸããè€æ°ã®éè€ãããšã³ããªãã€ã³ãïŒãçºçããããšã§ããå®éã«å¿ èŠã§ãã
å šäœãšããŠããã®ææ¡ã¯ã»ãšãã©ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ããŸãæ©èœããããã«èŠããŸããããã¹ãŠã®ã±ãŒã¹ã§ã«ãŒãæ§æãŸãã¯ã«ã¹ã¿ã ãµãŒããŒã®å¿ èŠæ§ãæé€ãããã®ã§ã¯ãããŸããã ãããããããä»æ¥ã®ããã«ãã¬ãŒã ã¯ãŒã¯ã䜿çšããç§ã®èœåã«åã£ãŠä»£ãããã®ã§ã¯ãªããšä»®å®ãããšãããã奜ãŸããããããŒãã¹APIã§ããããšã«çã®ç°è°ã¯ãããŸããã
{id}
ææ¡ãæ¯æããŸãã ããã¯è€æ°ã®ãã©ã¡ãŒã¿ãå¯èœã«ããç§ã¯ãããã¯ããã«è¯ãèŠãããšæããŸãã ãŸããReactãšã®é©åæ§ãé«ããªããŸãã
ç§ã¯file/¶m.js
æåã«è³æã§ãã URLããçŽæ¥ååŸããããã¡ã€ã«ã·ã¹ãã ãbashãšç«¶åããŠããããã«ã¯èŠããŸããã
ç§ã¯_
ã䜿çšããæ¬åœã«äœãå¥ã®ãã®ãå¿
èŠãªäººã®ããã«next.config.js
ãªãŒããŒã©ã€ããèš±å¯ãããããããŸããã
ããã«é¢ããäœæ¥ã«æè¬ããŸãã ãã°ãã欲ããã£ãïŒ â€ïž
ãããïŒ ððð
ããã§ã®ç§ã®å¯äžã®åé¡ã¯ã Link
ãhref
ãšas
äž¡æ¹ã®ãã©ã¡ãŒã¿ãŒãå¿
èŠãšããããšã§ãã
<Link to="blog/123" />
æžãã ãã§ãããšæããŸããNextjsã¯pagesãã©ã«ããŒå
ã®ãã¡ã€ã«ã«åºã¥ããŠãã¹ãŠã®ã«ãŒãããã§ã«ç¥ã£ãŠããã®ã§ãç°¡åã«"/blog/$id"
ã«å€æã§ããŸãã
ãããã£ãŠãé¿ããã¹ãæåã®ãªã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
&
ã¯ãéåæãµãã·ã§ã«ã§åŒæ°ã®å·ŠåŽãå®è¡ããbashã®å¶åŸ¡æŒç®åã§ãã å¹³æïŒ open pages/&customer
ã¯ããã¯ã°ã©ãŠã³ãã§open pages/
open pages/&customer
ãå®è¡ãããã©ã¢ã°ã©ãŠã³ãã·ã§ã«ã§ã³ãã³ãcustomer
ãå®è¡ããŸãã
ããã¯æ¬åœã«ã¯ãŒã«ã«èŠããŸãã
ããã«ãããããªãã®æ°ã®åäžãã¡ã€ã«ãã£ã¬ã¯ããªãäœæãããããã§ãïŒå
ã®äŸã®/blog/$id
ãªã©ïŒã 2ã€ã®åŸç¶ã«ãŒããã©ã¡ãŒã¿ïŒã€ãŸãã /git/compare/$hash1/$hash2
ïŒãå¿
èŠãªå Žåãããã¯ããã«é¢åã«ãªããŸãã
ãŸããããã°æçš¿ãã¬ã³ããªã³ã°ããããã®ãã¡ã€ã«åã$id.js
ã«ãªãã®ã奜ãã§ã¯ãããŸããã blog.js
ãšããååãä»ãããšãã¯ããã«ãããããããªããŸãã
ãããã@customRoute
ãã³ã¬ãŒã¿ãšçµã¿åãããã®ã§ããïŒ
// pages/blog.js
import {useRouter, @customRoute} from 'next/router'
@customRoute('/blog/:id')
function BlogPost() {
const router = useRouter()
// `blogId` will be `'how-to-use-dynamic-routes'` when rendering
// `/blog/how-to-use-dynamic-routes`
const blogId = router.query.id
return <main>This is blog post {blogId}.</main>
}
export default BlogPost
ããã¯ãææ¡ããããã£ãããªãŒã«ãã©ã¡ãŒã¿ã«å¯ŸããŠãããã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³ãæäŸããããã§ãã
ãã³ã¬ãŒã¿ãé¢æ°ã«é©çšããããšã¯ã§ããŸããïŒããããããã¯æåŸã«èªãã ãšãã«å€æŽãããŸãããïŒïŒãããŠææ¡ã¯ãããããšã«ããé ãé¢ããŠããŸã
ããŠãããªãããã®éãé²ãã ãšããããããããä»AMPãèšå®ãããŠããæ¹æ³ã§ãããè¡ãã§ãããïŒ
// /pages/blog.js
export const config = {
amp: true,
dynamicRoute: true // adds a [blog] property to the query object
// dynamicRoute: /\d+/ // could even support regex if you want
};
ãã ãããã®ãããªãã®ã¯ãããæç¹ã§åœ¹ç«ã€ãšæãããå Žåã¯ãåŸã§è¿œå ã§ãããšæããŸãã RFCã§èª¬æãããŠããããã«ãæåã¯åºæ¬çãªãµããŒããå¿ èŠã ãšæããŸãã ããã§å®éã®äœ¿çšæ³ãããã€ãååŸãããããå£ããŠãããšãããæŽç·ŽããŸãã ãŸããé¿ããã¹ãæåã¯ãã¡ã€ã«ã·ã¹ãã ã®ãã®ã ãã ãšæããŸãã ãããã¯ããã®æ©èœãæ§ç¯ããããã®æ¬åœã®ãããã«ãŒã§ãã
ãµãŒããŒã¬ã¹ãœãªã¥ãŒã·ã§ã³ã«é©ãããã£ã©ã¯ã¿ãŒã䜿çšããŠãã ããã ïŒAwsã§ã¯ãåé¡ãåŒãèµ·ããå¯èœæ§ã®ãããã£ã©ã¯ã¿ãŒãããã€ããããŸãïŒ
ã³ã³ããŒãã³ãããŒã䜿çšããŠæ§æãªããžã§ã¯ãããšã¯ã¹ããŒãããããšã¯ãç§ãå«ãã§ã¯ãããŸããã
HOCã䜿çšããããšãã§ããŸã
function BlogPost(props) {
return <div />
}
export default withCustomRoute(BlogPost, "/blog/:id")
ããŒãžã«éçãã£ãŒã«ãïŒgetInitialPropsãªã©ïŒãè¿œå ãããšã©ããªããŸããïŒ
// pages/blog.js
import {useRouter} from 'next/router'
function BlogPost() {
const router = useRouter()
// `blogId` will be `'how-to-use-dynamic-routes'` when rendering
// `/blog/how-to-use-dynamic-routes`
const blogId = router.query.id
return <main>This is blog post {blogId}.</main>
}
// By default it would be as it is now
BlogPost.route = '/blog/:id';
export default BlogPost
@ dmytro-lymarenkoãã©ãŠã¶ã§/blog
ã«ç§»åãããšã©ããªããŸããïŒ 404ïŒ
ããã¯ã³ã³ãã€ã«æã«æ±ºå®ããå¿ èŠããããããéçã«åæå¯èœãªãã®ãå¿ èŠã«ãªããšæããŸãã HOCãŸãã¯éçããããã£ã¯ããã§ã¯ãããŸããã
éçã«åæã§ãããã®ãå¿ èŠã§ãã HOCãŸãã¯éçããããã£ã¯
ãããŸã§ã«ç€ºãããã¹ãŠã®éçããããã£ã®äŸã¯ãéçã«åæå¯èœã§ãïŒãã ãã確ãã«ç°¡åã«å£ããããšã¯ãããŸãïŒã é¢æ°ããšã¯ã¹ããŒãããéçã«åæå¯èœãªæ¹æ³ã§é¢æ°ã«routeããããã£ãèšå®ããããã«èŠæ±ããããšãã§ããŸãã ã©ã³ã¿ã€ã ã¯ãå®è¡æã«èšå®ããããéçã¢ãã©ã€ã¶ãŒã«ãã£ãŠãã£ãããããªãã£ãã«ãŒãããããã£ããã§ãã¯ããèŠåãçºè¡ãããããšã©ãŒãã¹ããŒãããã§ããŸãã
ãã©ãŠã¶ã§/ blogã«ç§»åãããšã©ããªããŸããïŒ 404ïŒ
@ kingdaro -IMOãã¯ãã /blog
ãš/blog/:blogId
äž¡æ¹ã®ãã¹ã䜿çšããå Žåã¯ããã£ã¬ã¯ããªã䜿çšããŸãã ãã®ãã¹ããªãŒããŒããŒãããŠããã®ã§ããã£ã¬ã¯ããªæ§é ã¯æ£åœåãããŸãã
pages/
âââ blog/
â âââ $id.js
â âââ index.js
åºçŸé ã«
ãã£ãŒ| æ¬ ç¹
--- | ---
$
| ãã¡ã€ã«åã®ãã«èšå·ã¯ãã·ã§ã«ã«ãã£ãŠå°ç« ãšããŠäœ¿çšãããããããå§ãã§ããŸããã
_
| éåžžãå
éšã«ãŒãã瀺ããŸã
=
|
@
| PowerShellã®ã¹ãã©ããæŒç®å
{...}
| ã³ãã³ããã°ã«ãŒãåããããã«Bashã«ãã£ãŠäœ¿çšãããŸã
[...]
| zsh
ãã¡ã€ã«åã®çæ
:
| æå¹ãªãã¡ã€ã«åã§ã¯ãããŸãã
&
| éåæãµãã·ã§ã«ã§åŒæ°ã®å·ŠåŽãå®è¡ããbashã®å¶åŸ¡æŒç®åã§ã
ããŠãããªãããã®éãé²ãã ãšããããããããä»AMPãèšå®ãããŠããæ¹æ³ã§ãããè¡ãã§ãããïŒ
// /pages/blog.js export const config = { amp: true, dynamicRoute: true // adds a [blog] property to the query object // dynamicRoute: /\d+/ // could even support regex if you want };
ãã ãããã®ãããªãã®ã¯ãããæç¹ã§åœ¹ç«ã€ãšæãããå Žåã¯ãåŸã§è¿œå ã§ãããšæããŸãã RFCã§èª¬æãããŠããããã«ãæåã¯åºæ¬çãªãµããŒããå¿ èŠã ãšæããŸãã ããã§å®éã®äœ¿çšæ³ãããã€ãååŸãããããå£ããŠãããšãããæŽç·ŽããŸãã ãŸããé¿ããã¹ãæåã¯ãã¡ã€ã«ã·ã¹ãã ã®ãã®ã ãã ãšæããŸãã ãããã¯ããã®æ©èœãæ§ç¯ããããã®æ¬åœã®ãããã«ãŒã§ãã
å®éã«äœãåçã§ãããã確èªããã«ã¯ãè€æ°ã®ãã¡ã€ã«ã調ã¹ãå¿ èŠããããããconfigã䜿çšããããšã¯æªãèãã ãšæããŸãã ãã¡ã€ã«ã·ã¹ãã ã«èšå®ãããšãäžç®ã§ããããŸãã
è€æ°ã®æšæºã«ãŒãã£ã³ã°ãœãªã¥ãŒã·ã§ã³ãæ€èšããå¿ èŠãããã®ã§ã¯ãªãããšæããŸãã
ã·ã³ãã«ãªãã¡ã€ã«ããŒã¹ã®ã«ãŒãã£ã³ã°ã¯ãNext / ReactãåããŠäœ¿çšãã人ããã·ã³ãã«ãªã¢ããªããã°ããèµ·åããŠå®è¡ããã人ã«ãšã£ãŠã¯å€§ããªã»ãŒã«ã¹ãã€ã³ãã§ãããããªãå¶éãããå¯èœæ§ããããŸãã ãããŠããã®ãã¿ãŒã³ã«åçã«ãŒãã£ã³ã°ãã·ã¥ãŒããŒã³ããããšãããšããã®åçŽããå°ç¡ãã«ãªãããã¹ãŠããã¡ã€ã«ããŒã¹ã«ä¿ã€ãšããåç®ã§ãäžå¿ èŠãªè€éãã«ã€ãªããå¯èœæ§ãããããã«æãããŸãã
ãã®è°è«ãèªã¿ãNext.jsã®ç§èªèº«ã®äœ¿çšæ³ã«ã€ããŠèããåŸã代æ¿ïŒè£è¶³ïŒã«ãŒãã£ã³ã°ã·ã¹ãã ã®ãã¡ãŒã¹ãã¯ã©ã¹ã®ãµããŒããããã解決ããããã®æè¯ã®æ¹æ³ã§ãããšæããŸãã
ç§ã¯ãã®ã¹ã¬ããã®ç¬åµçãªèãæ¹ïŒãã³ã¬ãŒã¿ã䜿çšããææ¡ãªã©ïŒã®ããã€ãã奜ãã§ããããããã®ã¢ã€ãã¢ã«ã¯ééããªãç¬èªã®åé¡ããããŸãã äœãçŽ æŽããããã®ãæãã€ãããšãã§ãããšããã®ã§ããð
ã³ã³ããŒãã³ãããŒã䜿çšããŠæ§æãªããžã§ã¯ãããšã¯ã¹ããŒãããããšã¯ãç§ãå«ãã§ã¯ãããŸããã
HOCã䜿çšããããšãã§ããŸã
function BlogPost(props) { return <div /> } export default withCustomRoute(BlogPost, "/blog/:id")
ããã¯ããªãã¯ãŒã«ã§ãããã«ãŒãæ
å ±ã次ã®ãããªå€ãã®ãã¡ã€ã«ã«åå²ããã®ã§ã¯ãªãããšæããŸã
ããã¯ç®¡çãé£ãããªãå¯èœæ§ããããŸãã
ããŒã«ã«æ§æïŒãã¡ã€ã«å
ïŒãšã°ããŒãã«æ§æïŒ route.js
ïŒãææ¡ãããšããç§ã®åœåã®èãã¯ãæåã®ã³ã¡ã³ãã§è¿°ã¹ãç¹å®ã®ã·ããªãªïŒãã£ã¬ã¯ããªå
ã®å¯äžã®ãã¡ã€ã«ã§ããæ·±ããã¹ãããããã¡ã€ã«ïŒã«å¯ŸåŠããããšã§ãããéã»ãã³ãã£ãã¯ãã¡ã€ã«åãããã³catch-all-paramsïŒã
ãããã®ã³ã³ããã¹ãã§å³å¯ã«äœ¿çšãããšãURLããã¡ã€ã«ã·ã¹ãã ã«çŽæ¥ãããããããäœåãªããã©ã¡ãŒã¿ã®ã¿ãããŒã«ã«æ§æã«ãã£ãŠã¢ãã¬ã¹æå®ããããããæ··ä¹±ãã¯ããã«å°ãªããªããŸãã
ãšã¯èšããã®ã®ããŠãŒã¶ãŒã奜ããªããã«ãããè¡ãããšãå¶éããããšãããã©ããããããããŸããã èšç®ãããã«ãŒãã£ã³ã°ããŒãã«ãã³ã³ãœãŒã«ã«ãããã«å°å·ããããäºåã«å®çŸ©ããããã¡ã€ã«ã«ä¿åãããããããšãã§ããŸãã ã«ãŒãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãæ¯æŽããã«ã¯ãããã§ååã§ãã
@merelinguistèŠçŽè¡šã«æžããŠããããã«ãWindowsã§ã¯=
ãçŠæ¢ãããŠãããšã¯æããŸããã :
ãçŠæ¢ãããŠããæ¹æ³ã«ãªã³ã¯ããŠããŸããã Microsoft Windowsã®ãã¡ã€ã«åœåããã¥ã¡ã³ãã«ãããšãåãæåãèš±å¯ãããŠããŸãã
ç§ã¯ãã§ã«æ¬çªç°å¢ã§äœ¿çšãããããžã§ã¯ãã«åçã«ãŒãã移æ€ããŠããŸãïŒä»é±å ¬éã§ããããšãé¡ã£ãŠããŸãïŒã
ãã ããå ·äœçãªè³ªåã§ãããæ°ããnext @ canary APIæ©èœã¯åçã«ãŒãã£ã³ã°ããµããŒãããŸããïŒ
{ path: '/api/:customer', page: '/api/$customer/index.js' }
[email protected]ã§è©ŠããŠã¿ãŸãããã404ãèŠã€ãããªãããããŸã ååšããªããšæãããŸãã ãããã®2ã€ã®æ©èœïŒAPI +åçã«ãŒãïŒãURLã«ãŒãã£ã³ã°ã§åçã§ããããšãçã«ããªã£ãŠããããã«æããŸãã
@remyãŸã å®è£ ãããŠããŸããããã«å®è¡ããããã«ç§ã®ãªã¹ãã«ãããŸã
ãŸããWindowsããã³Linuxã·ã¹ãã ã ãã§ãªããä»ã®ã·ã¹ãã ãèæ
®ããå¿
èŠããããŸãã
https://en.wikipedia.org/wiki/Filename#Comparison_of_filename_limitations
ç§ã®ææ¡ã«ã€ããŠããã«æ å ±ãè¿œå ããããšæããŸãïŒ
ããŒãžã«éçãã£ãŒã«ãïŒgetInitialPropsãªã©ïŒãè¿œå ãããšã©ããªããŸããïŒ
// pages/blog.js import {useRouter} from 'next/router' function BlogPost() { const router = useRouter() // `blogId` will be `'how-to-use-dynamic-routes'` when rendering // `/blog/how-to-use-dynamic-routes` const blogId = router.query.id return <main>This is blog post {blogId}.</main> } // By default it would be as it is now BlogPost.route = '/blog/:id'; export default BlogPost
const route = `/blog/${somethingElse}`;
BlogPost.route = route; // is not allowed
<Trans id="msg.docs" /* id can only be static string */>
Read the <a href="https://lingui.js.org">documentation</a>
for more info.
</Trans>
ãã§ã«ãªã¹ããããŠãããã¬ãã£ãã¯ã¹ã®ãªã¹ããèŠãŠãã@
ã·ã³ãã«ãã¬ãã£ãã¯ã¹ã䜿çšããªã匷ãçç±ãããã®ã§ã¯ãªãããšæããŸãã
ããã䟡å€ããããã©ããã¯çãããã§ãããNuxtãšåçã«ãªããŸããã€ãŸããã©ã¡ããäžæ¹ããåãæ¿ãããšããã®åäœãããã«ããããŸãã
ãããã¯ããã¬ãã£ãã¯ã¹ããŠãŒã¶ãŒãªãã·ã§ã³ã«ããããšãèãã人ã¯ããŸããïŒ ãããããžã§ã¯ããå¥ã®ãããžã§ã¯ãããç解ããã®ãé£ãããªããŸãããå¿
èŠã«å¿ããŠãæ¥é èŸquery__{...}
ãªã©ãä»ããããšãã§ããŸãã
ã¡ãã£ãšããèãã
@remyã®ææ¡ã«ç¶ããŠãNextããã¡ã€ã«ã·ã¹ãã ããã®ã«ãŒãã解æããæ¹æ³ã«ã€ããŠAPIãå®å šã«éããŠã¿ãŸãããã ãŠãŒã¶ãŒã«å¿ èŠãªã ãã®ïŒãŸãã¯å°ãªãïŒæè»æ§ãæäŸããä¿¡é Œæ§ã®é«ããµãŒãããŒãã£ã«ãŒãã£ã³ã°ãœãªã¥ãŒã·ã§ã³ãåºæ¿ããŸãã
@ scf4 PoCã§ããã©ã€ãã©ãªãããã now.json
ã«ãŒãæ§æã䜿çšããŠnextjsã§ãŠãããŒãµã«ã«ãŒãã£ã³ã°ãå®è¡ããŸãã
ZeitããŒã ãã¯ã©ã€ã¢ã³ãåŽã©ã€ãã©ãªã®ã«ãŒãããŒãµãŒããªãŒãã³ãœãŒã¹åããããšãæãã§ããŸãã
NuxtãèŠããšã _id.js
ã¯ããã»ã©æªããªããšæããŸãã ã¯ããããªããèšã£ãããã«ãç§ãã¡ã¯ãã§ã«_app
ãš_document.js
ããŠãããå
¬ã«ã«ãŒãã£ã³ã°ããããšã¯ã§ããŸããã ãã ããããã¯å€ãã®ããŒãžã®ãã³ãã¬ãŒãã§ãããããåçã«ãŒãã¯ã«ãŒãã£ã³ã°ã§ããªããšèŠãªãããšãã§ããŸãã
éçãµã€ãã®ãšã¯ã¹ããŒãã§ã¯ãããã¯ã©ã®ããã«åŠçãããŸããïŒ
ïŒããã¯æ°ã«ããªãã§ãã ããïŒ
ãŸããNext.jsãçæãããã«ãŒããåäžã®ãã¡ã€ã«ïŒããããããã©ã«ãã§ã¯é衚瀺ïŒã«åºåããå Žåã«ã圹ç«ã€ãšæããŸãã å°ãªããšãããããžã§ã¯ãã«åãçµãã§ãã人ã ãžã®æçšãªåç §ãšããŠåœ¹ç«ã¡ãŸãããåŸã§åŒ·åãªåçã«ãŒãã£ã³ã°ãžã®æãéãããšãã§ããŸãã
ã€ãŸããå®è¡æã«ãã®ãã¡ã€ã«ãã«ãŒãåŠçã«äœ¿çšããå Žåããã¡ã€ã«ã·ã¹ãã ããŒã¹ã®APIã®å©ç¹ã倱ãããšãªãããŠãŒã¶ãŒãã«ãŒããè¿œå /å€æŽããã®ã¯éåžžã«ç°¡åã§ãïŒããšãã°ãè€éãªãã¿ãŒã³ãããã³ã°ã®å ŽåïŒã
ããã«ãããæåã§å€æŽãããã«ãŒãã远跡ããæ¹æ³ã«é¢ããŠããã€ãã®èª²é¡ãçºçããŸããã解決ãããã°ããããã¯ããã«æåã®è§£æ±ºçã«ãªããšæããŸãã
@ scf4 Next.jsã«ã¯ãã«ã¹ã¿ã ãµãŒããŒãªãã·ã§ã³ã䜿çšããŠè€éãªã«ãŒããå®è¡ããæ©èœããã§ã«ãããŸãã ããªããææ¡ããŠããããšã¯ããã§ã«å©çšå¯èœãªããŒã«ãšã»ãŒåãéã®ã³ãŒãã§éæãããŸãã
ãããããååã«å ¬å¹³ã ã
ãšã«ãããç·šéå¯èœãªåäžã®ã«ãŒããã¡ã€ã«ãæã€æ¹ãã¯ããã«åªãããªãã·ã§ã³ã ãšæããŸãïŒ
ç§ã¯ãã¡ã€ã«ã·ã¹ãã ã䜿çšããã«ãŒãã£ã³ã°ã«é¢ããããã€ãã®
[param]
ãæãå®å
šã«èŠããŸãïŒãããŠSapperã«ãã£ãŠäœ¿çšãããŸãïŒã:
ã¯ExpressãŠãŒã¶ãŒã«ã¯ãªãã¿ããããŸãããWindowsFSã§åé¡ãçºçããå¯èœæ§ããããŸãã$
ãš{param}
ã¯ãã·ã§ã«ã®å€æ°ãšäžæ¬åŒ§ã®å±éã«äœ¿çšããããããCLIã§ã¯ããã«åé¡ãçºçããå¯èœæ§ããããŸãã_
æ©èœããå¯èœæ§ããããŸãããããã©ã€ããŒããã€ã³ãžã±ãŒã¿ãŒãšããŠã¯ããŸãã«ãäžè¬çã§ããå人çã«ã¯ãã«ãŒãã®ãã¡ã€ã«ããã¯ã€ããªã¹ãã«ç»é²ããïŒ /^index\.
ïŒãšãã©ãã¯ãªã¹ãã«ç»é²ããïŒ /^_/
ïŒã®æ¹ãåªããŠããŸããã /pages
ãšã®äžäœäºææ§ã®åé¡ã«ãªããŸãã
APIã«ãŒãïŒïŒ7297ïŒããµããŒãããããã®æè¿ã®è°è«ã«ãããããã¯/routes
æ°ãã家ã®äžã§/api
ãš/pages
äž¡æ¹ããµããŒãããæ©äŒã«ãªãå¯èœæ§ããããŸãã
ãã ãã_ãããŠããã¯åŒ·åãªããããã_ãNext.jsãšã³ã·ã¹ãã ã¯ã_ã€ã³ã¯ãªã¡ã³ã¿ã«_æ©èœã®è¿œå ãä¿èšŒããã®ã«ååãªå€§ããã§ãã
è§ãã£ãïŒ [example]
ïŒã¯ããã¿ãŒã³ãããã³ã°ã®ããã«zshã«ãã£ãŠäœ¿çšãããããããããå®è¡å¯èœã§ã¯ãããŸããã
ãã¡ã€ã«åçæã®äŸãåç §ããŠãã ãã
ãã©ã±ãã
[]
ã¯ããã¿ãŒã³ãããã³ã°ã®ããã«zshã«ãã£ãŠäœ¿çšãããããããããå®è¡å¯èœã§ã¯ãããŸããã
https://github.com/zeit/next.js/pull/7623ã§æåããããã§ã
ãããã¢ãããããããšãã ããã«ãã³ã¡ã³ããæçš¿ããŸããã
[id]
ãè©ŠããŸãããããã¹ã§äœ¿çšããã®ã¯é¢åã§ãïŒäŸïŒ cd \[id\]/view.js
ïŒã ç§ã«ã¯ãäºéã¢ã³ããŒã¹ã³ã¢__id
ïŒäŸïŒ cd __id/view.js
ïŒãåæ§ã«æ©èœããå
éšãã¡ã€ã«/ãã©ã«ããŒïŒäŸïŒ _app.js
ïŒãšåºå¥ã§ããŸãïŒå°ãæ··ä¹±ãããããããŸããïŒã
@AaronDDMã¯zsh
ãŸããïŒ bashã§[
ãŸãã¯]
ããšã¹ã±ãŒãããå¿
èŠã¯ãããŸããã
ãããããã¯zsh
ã§ãèµ·ãããŸã-ãããã®ãã£ã¬ã¯ããªãšå¯Ÿè©±ããã®ã¯éåžžã«é¢åã§ãã
$ mkdir [asdf]
zsh: no matches found: [asdf]
$ mkdir \[asdf\]
$ cd [asdf]
zsh: no matches found: [asdf]
$ cd \[asdf\]
ãããŠã zsh
ã¯macOS Catalinaã®ããã©ã«ãã®ã·ã§ã«ã«ãªãã®ã§ãçµå±ããã«ã€ããŠäœãããå¿
èŠããããããããŸãã...
__id.js
åæãã
ããŒããæ¬åœã«__
æããŠããªãããã ç§ã«ã¯èŠæ ãããããªãã
@merelinguist emãJestã¯ããã©ã«ãã®ãã¹ããã©ã«ãã«__tests__
ã䜿çšããŸãããå Žåã«ãã£ãŠã¯__
ãçã«ããªã£ãŠãããšæããŸãã
@YUFENGWANGãã¶ããã§ãã§ããã°1æåããããšæããŸãã æçµçã«ãæåã®è§£æ±ºçã¯æ¬¡ã®ããã«ãªããšæããŸãã
=
ãããªãè³¢æãªã¯ãã¹ãã©ãããã©ãŒã ã®ããã©ã«ãnext.config.js
ãªãã·ã§ã³åäžã®æåã«åæããŸãããããŒãæ§æã«ãããã§ãã ç§ã®æšæž¬ã§ã¯ãããã¥ã¡ã³ãã§èª¬æããŠããå€ãã®äººããã¹ãŠã®åé¡ãçµéšããã§ãããã
=
ã¯zshã«ãã£ãŠäºçŽãããŠããããšã«ã泚æããŠãã ããã ããã¥ã¡ã³ãããïŒ
åèªãåŒçšç¬Šã§å²ãŸããŠããªãã=ãã§å§ãŸããEQUALSãªãã·ã§ã³ãèšå®ãããŠããå Žåãåèªã®æ®ãã®éšåãã³ãã³ãã®ååãšããŠäœ¿çšãããŸãã ã³ãã³ãããã®ååã§ååšããå Žåããã®åèªã¯ã³ãã³ãã®ãã«ãã¹åã«çœ®ãæããããŸãã
ãã ã®ã¢ã€ãã¢ã æ¥å°ŸèŸã䜿çšããã®ã¯ã©ãã§ããïŒ ããšãã°ã [email protected]
ãªã©ã§ååã§ãã ããã«ãããæåãæå¹ã§ããéããã·ã§ã«ããã¡ã€ã«ã·ã¹ãã éã§ãšã¹ã±ãŒãããŠäœæ¥ããå¿
èŠããããšããåé¡ã解決ããå ŽåããããŸãã
ãããŸã§ã®ãšããããããã¯ãšã¹ã±ãŒãããå¿ èŠãªãã«zshãšbashã§æ©èœããŸãã
[email protected]
example~.js
example=.js
ããã æ¥å°ŸèŸã§ã¯ãªããæ«å°Ÿã®URLãã©ã¡ãŒã¿ã瀺ãæ¹æ³ã§ãã
ãããã£ãŠã [email protected]
ã¯blog/:id
ãŸãã
compare@[email protected]
ã¯compare/:a/:b
ãŸãã
ããã«ãããäžèšã§å察ããŠããæ·±ããã¹ããããåäžãã¡ã€ã«ãã£ã¬ã¯ããªã解決ããã«ãŒãã£ã³ã°å®çŸ©ãã¡ã€ã«ã·ã¹ãã å šäœãããŒã¹ã«ä¿ã€ããšãã§ããŸãã
ããã¯æŽŸæã«èŠããŸãããã次ã®ãããªãã®ã¯ã©ãã§ããïŒ
/blogs/_var_blog-id/index.js
/blogs/_var_blog-id.js
ãã¬ãã£ãã¯ã¹_var_
JSå€æ°å®£èšãæš¡å£ããããšããçš®é¡ã ãããšããããã¯è¶
çãã1æåã®ãã®ã§ãªããã°ãªããŸãããïŒ
~
æåã¯ã©ãã§ããïŒ
/blogs/~id
ã
~
ããã¬ãã£ãã¯ã¹ãšããŠäœ¿çšããããšããPOSIXæºæ ã®ã·ã§ã«ã®ããŒã ãã©ã«ããŒã«å±éããããã«äœ¿çšããããããå®è¡å¯èœã§ã¯ãããŸããã
[0-9a-zA-Z-._]
ïŒæ£èŠè¡šçŸïŒãšäžèŽããªãæåã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã·ã§ã«ãããã³ãã¡ã€ã«ã·ã¹ãã å
šäœã®ãã¬ãã£ãã¯ã¹ãšããŠå®å
šã§ãããšã¯èŠãªãããŸããã
äžéšã®æåãã€ã³ã©ã€ã³ã§å®å šã§ã¯ãããŸããã 眮æã«ã€ããŠã¯zshã®
ãŸããèŠãç®ã掟æãã©ãããè¿œæ±ããã®ã§ã¯ãªããçŽæçã§èªã¿ããããã³ãã¥ãã±ãŒã·ã§ã³ãããããã®ã«ããå¿ èŠããããšæããŸãã
[params].js
è§ãã£ãã䜿çšãããšããããšã¬ã¬ã³ãã§åºã䜿çšãããŠããããã«èŠããŸãã ïŒãµãããŒãnuxt v3ïŒïŒãpages/_helper.js
ã¯éåžžããã©ã€ããŒãé¢æ°çšã§ãããã¬ã³ããªã³ã°ããªãã§ãã ããã ããã«ãããpagesãã©ã«ããŒå
ã«ãã«ããŒã³ã³ããŒãã³ããäœæã§ããŸãimhoïŒããã¯ãã倧ããªåé¡ã«å¯Ÿããäžæçãªè§£æ±ºçã®ããã«æããŸãã ãã¡ã€ã«æ§é ã«åºã¥ããŠã«ãŒããäœæããããšã¯ãæåã¯éåžžã«äŸ¿å©ã§ãããã«ãŒãããã©ã¡ãŒã¿ãŒãªã©ãæ°çŸããå Žåã¯ãé©åã«æ¡åŒµã§ããŸãããã«ãŒãæ§æãã¡ã€ã«ïŒåãã£ã¬ã¯ããªã«routes.jsãã¡ã€ã«ãããå¯èœæ§ããããŸãïŒããè¯ãé·æçãªè§£æ±ºçã§ãã ç§ã¯ããã¡ã€ã«ããã«ãŒããç°¡åã«äœæããã®ã§ã¯ãªããããã«äœ¿çšã§ããæ©èœïŒSSRãé床ãªã©ïŒãåããŠãããããå人çã«nextjsã«æ¹ãããŠããŸãã
@mmahalwyããªãã¯é ã«éãæã¡ãŸããã
Next.jsã¯ãïŒãã¡ã€ã«ã·ã¹ãã ã«åºã¥ããŠïŒã«ãŒãæ§æããã§ã«çæããŠããŸãã ãã®æ§æãããæ瀺çã«ãããããŠãŒã¶ãŒãå¿ èŠã«å¿ããŠãã€ãžã§ã¯ããã§ããããã«ããããšããããã§æãã·ãŒã ã¬ã¹ãªãœãªã¥ãŒã·ã§ã³ã«ãªããšæããŸãã
@mmahalwy @ scf4 FWIWããã¡ã€ã«ã·ã¹ãã ã«ãŒãã®éèŠãªçç±ã¯ãäžå åããããã¡ã€ã«ãæã€å¿ èŠæ§ãæé€ããããšã§ãã å®éããªã³ã¯ãšã«ãŒãã£ã³ã°ã®ããã®Next.jsã®APIå šäœã¯ããã®å¶çŽãäžå¿ã«èšèšãããŠãããšç°¡åã«äž»åŒµã§ããŸãã
ã«ãŒãæ§æã®åé¡ã¯ãã¯ã©ã€ã¢ã³ãã«åºè·ããå¿ èŠãããããšã§ããããã¯ãæ°çŸããæ°åã®ã«ãŒããããå Žåãéåžžã«å€§éã®ã³ãŒããã³ãã«ãæå³ããå¯èœæ§ããããŸãã
ãã ããïŒç§ãç¥ãéãããã®åé¡ã@timneutkensãšéå»æ°ãæã«ããã£ãŠäœåºŠã話ãåã£ãããšããïŒäžå åãããæ§æãªãã§ã¯å®éã«ã¯è§£æ±ºã§ããªãäžè¬çãªãŠãŒã¹ã±ãŒã¹ãããªããããŸãã 以åã®ã³ã¡ã³ãã«ãããã®ããã€ãããªã¹ãããŸãããããã£ãšãããŸãã
æãç°¡åãªã®ã¯ãäœæè ããµã€ãäžã®ããŒãžãžã®ãªã³ã¯ãäœæã§ããCMSäž»å°ã®ããã°ãæã€ããšã§ãã åºã«ãªãããŒãžã¢ãžã¥ãŒã«ãäœã§ããããç¥ããã«ãåçŽãªå€ãURLã§ãªã³ã¯ãäœæããã ãã§ãã äžå åãããã«ãŒãæ§æã䜿çšãããšãURLãéäžèŽãããŠãããŒãããããŒãžã決å®ããã®ã¯éåžžã«ç°¡åã§ãïŒç§èªèº«ã®ã©ã€ãã©ãªã next-route-resolverã¯ããã®ãŠãŒã¹ã±ãŒã¹ãããã³ç§ãæãã€ããä»ã®ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ããµããŒãããããã«èšèšãããŠã
ã«ãŒãèšå®ãªãã§äœæ¥äžã®ãµã€ããæ©èœãããæ¹æ³ãããããªããããã«ãŒãèšå®ããã¡ã€ã«ãµã€ãºã®èš±å®¹ç¯å²å ã«ç¶æããæ¹æ³ãèŠã€ããããšã«éç¹ã眮ããŠããŸãã ä»ã®äººã«ãšã£ãŠã¯ããã¡ã€ã«ã·ã¹ãã ã®ã«ãŒãã£ã³ã°ã§ååãããããŸããã ãã¹ãŠã解決ããåäžã®ãœãªã¥ãŒã·ã§ã³ãããå Žåãã«ãŒãã£ã³ã°ã¯åé¡ã§ã¯ãªããšæããŸããããã¯ãã¹ãŠããã¬ãŒããªãã®ãã©ã³ã¹ãåãããšã§ãã
å ã«è¿°ã¹ãããã«ããã®ææ¡ã«é¢ããéããã«ãŒãã£ã³ã°ã®åé¡ãå®å šã«è§£æ±ºãããã®ãšããŠè²©å£²ãããŠããéããããã¯å°ã誀解ãæãå¯èœæ§ããããããåé¡ãªãããã§ã:)
@AndrewIngramç§ã¯ããªããã©ãããæ¥ãŠããã®ãç解ããŠããŸããããã®å¶éã¯nextjsãæã€åãå¶éããŠããŸãã Nextjsã¯ããã«äœ¿ãããã®ãããããããã®ã§ãæ°ãããããžã§ã¯ããäŒç€Ÿãããã䜿çšããã®ã¯ç°¡åã§ãã ãã ãã課é¡ã¯ãã«ãŒãã£ã³ã°ã«é¢ããé£ããæèŠã§ãããå°æ¥çã«ãããæé€ã§ããªããªããŸãïŒãããŠã倧äŒæ¥ãšããŠããããžã§ã¯ããé¢å¿ãã¡ã³ããã³ã¹ã倱ã£ãå Žåã®åºå£æŠç¥ãåžžã«æ€èšããŠããŸãïŒã
@mmahalwyããªãã¯ç§ã®
äžå åãããã«ãŒãã£ã³ã°æ§æãŸãã¯é«åºŠãªã«ãŒãã£ã³ã°æ§æãåžæããå Žåã¯ãã«ã¹ã¿ã ãµãŒããŒãå€éšããã±ãŒãžã䜿çšããŠé©åã«åŠçãããŠããŸãããïŒ ããã«äœãè¿œå ãããããšãæãã§ããŸããïŒ
ããã¯ãã¹ãŠãã®RFCãããããã¯ããå€ããŠããããã§ãã OPãå«ãããããã«ãŒãã£ã³ã°ã®æçµçãªãœãªã¥ãŒã·ã§ã³ã§ãããšç€ºåããŠãã人ã¯ããªããšæããŸãã ããã¯ããã¡ã€ã«ã·ã¹ãã ããŒã¹ã®ã«ãŒãã£ã³ã°ãæ¹åããã ãã§ãã
ç§ã¯ããæ°é±éããããããžã§ã¯ãã«åçã«ãŒãã䜿çšããŠããŸãïŒ3æ¥åã«ã«ããªã¢ã¬ãã§[param]
移åãããããšã«æ³šæããŸããã $
ã䜿çšããŠããŸãïŒã
ç§ã¯getRequestHandler
ã䜿ãå§ããŸãããããµãŒããŒåŽã§åçã«ãŒãã£ã³ã°ãååŸããŠããªããšæããŸãã
ããã¯ãã°ãªã®ãããããšãæå³çãªãã®ïŒã€ãŸãã getRequestHandler
ãžã®å€æŽïŒãªã®ãããããšãgetRequestHandler
ã䜿çšãããšãåçã«ãŒãã£ã³ã°ãå®å
šã«ãªãã«ãªãã®ã§ããããïŒããã¯ä»ã§ã¯çã«ããªã£ãŠããŸãâŠïŒ ïŒ
äžå åãããã«ãŒãã£ã³ã°æ§æãŸãã¯é«åºŠãªã«ãŒãã£ã³ã°æ§æãåžæããå Žåã¯ãã«ã¹ã¿ã ãµãŒããŒãå€éšããã±ãŒãžã䜿çšããŠé©åã«åŠçãããŠããŸãããïŒ ããã«äœãè¿œå ãããããšãæãã§ããŸããïŒ
ããã§ã®ç®æšã®1ã€ã¯ãNowïŒçŸåšããã¹ãŠã®åçã«ãŒããæ§æã®äžéšã«ããå¿ èŠãããïŒãªã©ã®ãµãŒãã¹ã§äœ¿ããããããããã ãã«ãã«ã¹ã¿ã ãµãŒããŒãäœæããå¿ èŠããªããããšã§ãã
ããã¯ãã¹ãŠãã®RFCãããããã¯ããå€ããŠããããã§ãã OPãå«ãããããã«ãŒãã£ã³ã°ã®æçµçãªãœãªã¥ãŒã·ã§ã³ã§ãããšç€ºåããŠãã人ã¯ããªããšæããŸãã ããã¯ããã¡ã€ã«ã·ã¹ãã ããŒã¹ã®ã«ãŒãã£ã³ã°ãæ¹åããã ãã§ãã
å®éãããã«ã¯ããã€ãã®è¿œå ã®ã³ã³ããã¹ãããããŸãã ãã®ææ¡ã¯ä¹ ãã¶ãã§ãããããã«é¢é£ããŠç§ãèŠãå€ãã®è°è«ïŒç§ãçŽæ¥é¢ãã£ããã®ãå«ãïŒã«åºã¥ããŠãããã¯ãããã®ã«ãŒãã䜿çšããå¿ èŠæ§ãæé€ãããã®ãšããŠããçšåºŠèªå€§å®£äŒãããŠããŸããnext-routesãç§èªèº«ã®ãããªç®¡çã©ã€ãã©ãªã ãã®RFCã§æºããããŠããªããŠãŒã¹ã±ãŒã¹ã匷調ããããšã¯ãããã¯ããå€ããŠãããšã¯æããŸããã ãããã®ããã€ãã¯ãããããææ¡ãžã®ããã€ãã®å€æŽã«ãã£ãŠæºãããããããããŸããããä»ã¯ããã§ã¯ãªããããããŸããã ãããããããã«ãããææ¡ãããŠãããã®ã®éçã«ã€ããŠã®èªèãé«ããããšã¯ç¢ºãã«äŸ¡å€ããããŸããïŒ
FWIWã§ã¯ãPinterestã§[param]
ã¹ã¿ã€ã«ã®FSããŒã¹ã®ã«ãŒãã䜿çšããŠããŸãïŒãã ããNextã§ã¯ãããŸããïŒã ãããŸã§ã®ãšãããéåžžã«é©åã«ã¹ã±ãŒãªã³ã°ãããŠããŸãã æ倧ã®æ¹å€ã¯ãJestã[]
ãæ£èŠè¡šçŸã®ãã¢ãšããŠè§£éãããããparam-fulãã³ãã©ãŒã®ãã¹ããã¿ãŒã²ããã«ããããšãé£ããå Žåãããããšã§ãã
@chrislloyd誰ããzshããŸãã¯ããããç°ãªãæ¹æ³ã§è§£éããããŒã«ã䜿çšããŠããããšãèæ ®ããŠãããŸããŸãªç°å¢ã®ãã¹/ãã¡ã€ã«ã«ãã®åœ¢åŒã䜿çšããŠãã¡ã€ã«ãäœæããã³ç®¡çããçµéšã¯äœã§ããïŒ
[]
ãzshã§ã®ãã¿ãŒã³ãããã³ã°ã«äœ¿çšããŠããããã«èŠããŸãïŒãããŠãJestã§èšãããã«ïŒããããã®ãã¹ããšã¹ã±ãŒãããå¿
èŠããããŸãã ããã_ç¥ã£ãŠãã_å Žåãããã¯ããã»ã©åé¡ã«ã¯ãªããŸããããåå¿è
ã䜿çšããŠç解ã§ããã¯ãã§ããããšãèãããšããããé©åãªåœ¢åŒã§ãããã©ããã¯çåã§ãã
ç§ã䜿çšããŠã®ã¢ã€ãã¢æã£ãŠ!
ã®ããã«ãå¿
èŠãªãã©ã¡ãŒã¿ãªã©ã/pages/id!.js
ãš?
ã®ããã«ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã®ããã«ã /pages/posts/id?.js
ã
äžèšã®èª¬æã®ããã«ãã¬ãã£ãã¯ã¹ã«åé¡ã¯ãªãã !
ãå¿
é ãã©ã¡ãŒã¿ãŒãè¡šãã ?
ããªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒãè¡šãæ¹æ³ã«ã€ããŠ!
ããç¥ã£ãŠããŸãã
Windowsã§ã¯ããã¡ã€ã«åã«çå笊ã䜿çšã§ããŸãããäž¡æ¹ãšãïŒ ãšïŒ Bashã§ã¯ç¹å¥ãªæå³ããããŸãã
API
ã«ãŒããåçãã©ã¡ãŒã¿ãŒïŒ7629ããµããŒãããããã«ãªããŸããð
@remy getRequestHandler
ã¯åçã«ãŒãã£ã³ã°ãåŠçããããšãæåŸ
ãããŠããŸã-ããŒã«ã«ã§åŠçããããšã確èªããŸããã 調æ»ã§ããããã«ãè€è£œæé ãå«ãå¥ã®ãã°/åé¡ãæåºããŠããã ããŸããïŒ ïŒç¥ãïŒ
çããããã«ã¡ã¯ïŒ ãã®RFCãžã®ä¿¡ããããªãã»ã©ã®å¿çãããããšãã
ãã®RFCã¯ãNext.js 9ã§å®å®ãããã®ãšããŠå®è£
ããããªãªãŒã¹ãããŠããŸãã
詳现ã«ã€ããŠã¯ãããã°æçš¿ãã芧ãã ããã
ããã§æäŸããããã¹ãŠã®é«åºŠãªãã£ãŒãããã¯ã«å¯ŸåŠããããã«ãå°æ¥çã«æ°ããRFCãå ¬éããäºå®ã§ãã å©çšå¯èœã«ãªã次第ãããã«æŽæ°ãæçš¿ããŸãã
æãåèã«ãªãã³ã¡ã³ã
æ祚ïŒãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ã«é¢å¿ã瀺ãã«ã¯ããã®ã³ã¡ã³ãã«ã+1ããä»ããŠãã ããã
泚ïŒãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã¯ããã®RFCã§ãã§ã«äœ¿çšå¯èœã§ãããæ瀺çãªæ§æããªãã ãã§ãïŒãèŠåãã»ã¯ã·ã§ã³ãåç §ïŒã