Next js
21407 ワード
設定
npx create-next-app [app-name]
# or
yarn create next-app [app-name]
typescriptの追加npx create-next-app --typescript
# or
yarn create next-app --typescript
next jsを私のプロジェクトに追加
npm install next react react-dom
# or
yarn add next react react-dom
package.スクリプトをjsonに追加"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
ページディレクトリを作成し、内部にファイルを作成する場合、デフォルトではそのファイルの名前でルーティングされます.例:
/pages/index.jsファイル
「/」はルーティングパスとして有効です.
/pages/first.ファイル.
「/first」はルーティングパスです.
どうてきルーティング
fileを「[value].js」に生成します.
import { useRouter } from 'next/router'
const Post = () => {
const router = useRouter()
const { value } = router.query
return <p>Post: {value}</p>
}
export default Post
/posts/abcのpathを入力します.tagのテキストはPost:abcです.
/posts/abc?query=efg
入力
router.queryの値は次のとおりです.
{query:"efg",value:"abc"}
に出力します.次はnextで使用するリンクの例です.
import Link from 'next/link'
function Home() {
return (
<ul>
<li>
<Link href="/post/abc">
<a>Go to pages/post/[pid].js</a>
</Link>
</li>
<li>
<Link href="/post/abc?foo=bar">
<a>Also goes to pages/post/[pid].js</a>
</Link>
</li>
<li>
<Link href="/post/abc/a-comment">
<a>Go to pages/post/[pid]/[comment].js</a>
</Link>
</li>
</ul>
)
}
export default Home
react-router-domで使用するリンクとは少し違います.toの代わりにhrefを使用します.
catch all routes
/posts/abc/qwer?foo=bar
このような形で、より多くのルーティングデップを受け入れる必要がある場合、どうなるのでしょうか.
posts/abc/qwer?foo=bar
このようなurlがある場合:
[value].jsの場合404エラーが発生します.
ファイルの名前をspreadに変更
[...value].js
urlを認識するとvalueは配列に変更され、以下に示す.李ギョンウ/postsまで入力したurlだけは認識できない.
オプションcatch all routionsの使用
[[...value]].js
ファイル名を上記のフォーマットに変更し、/postsにアクセスしてみます.このコンポーネントは正常に出力されますが、コンソールまたはp tagのクエリーに出力しようとしません.
これらの方法を用いて動的ルーティングを実現すればよい.
もしかするとpages/posts/でcreateするかもしれません.jsというファイルが既に存在する場合
動的ルーティングの場合、createはcreateです.jsと自動コーディネート.
動的ルーティングによるファイルのルーティングの重複を防止します.
ほとんどの処理はLinkで行えますが、ルーティングは手動で変更できます.
import { useRouter } from 'next/router'
function ReadMore() {
const router = useRouter()
return (
<span onClick={() => router.push('/about')}>Click here to read more</span>
)
}
export default ReadMore
上記のルータです.push()を使用します.Shallow Routing(浅い)
浅いルーティングはページを置き換えず、パスのみを変更します.
同じページ以外にジャンプすると、浅いルーティングは行われません.
router.push('/?counter=10', undefined, { shallow: true })
Pages
Pre-rendering
next jsはデフォルトですべてのページをプリプレゼンテーションします.
2つの形式のプリプレゼンテーションがあり、それぞれの形式の違いはページにHTMLを生成するときに現れます.
ほとんどのページは静的生成を使用しますが、ユーザーが変更を要求したページは通常、サーバ側レンダリングを使用します.
データを使用した静的作成
一部のページでは、事前レンダリングのために外部データをインポートする必要があります.2つのシナリオがあり、1つまたは2つが適用されます.いずれの場合もnextjsは次の機能を提供します.
:getStaticProps
:getStaticPath+getStaticProps
シーン1:ページの内容が外部データに依存している場合
例:ブログページでは、CMSからブログ投稿のリストを取得する必要があります.
function Blog({ posts }) {
return (
<ul>
{posts.map((post) => (
<li>{post.title}</li>
))}
</ul>
)
}
export default Blog
nextjsは、レンダリング前にデータをインポートするために同じファイルからエクスポートされたasync関数です.getStaticPropsを許可します.
この関数は、構築時に呼び出され、プリレンダリング時にインポートしたデータをpropsとしてページに渡します.
function Blog({ posts }) {
// Render posts...
}
// This function gets called at build time
export async function getStaticProps() {
// Call an external API endpoint to get posts
const res = await fetch('https://.../posts')
const posts = await res.json()
// By returning { props: { posts } }, the Blog component
// will receive `posts` as a prop at build time
return {
props: {
posts,
},
}
}
export default Blog
シーン2:ページパスは外部データによって異なります
nextjsでは、ダイナミックパスを持つページを作成できます.
データもダイナミックパスに基づいて動的に変更されます.
// This function gets called at build time
export async function getStaticPaths() {
// Call an external API endpoint to get posts
const res = await fetch('https://.../posts')
const posts = await res.json()
// Get the paths we want to pre-render based on posts
const paths = posts.map((post) => ({
params: { id: post.id },
}))
// We'll pre-render only these paths at build time.
// { fallback: false } means other routes should 404.
return { paths, fallback: false }
}
作成中...
Reference
この問題について(Next js), 我々は、より多くの情報をここで見つけました
https://velog.io/@bclef25/Next-js
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Next js), 我々は、より多くの情報をここで見つけました https://velog.io/@bclef25/Next-jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol