Memo

メモ > 技術 > フレームワーク: Next.js > 基本の機能

基本の機能
■Reactによる機能実装とTailwind CSSによる装飾 src/app/page.tsx
'use client' import { useState } from 'react' export default function Home() { const [name, setName] = useState('') const [message, setMessage] = useState('名前を入力してください。') const doInput = (e: any)=> { setName(e.target.value) } const doClick = (e: any)=> { e.preventDefault() setMessage('こんにちは、' + name + 'さん。') } return ( <main> <h1 className="title">Next.js</h1> <p className="message">{message}</p> <form className="form"> <input type="text" className="input" onChange={doInput} /> <button className="button" onClick={doClick}>クリック</button> </form> </main> ) }
src/app/globals.css (追加分)
.title { @apply text-2xl font-bold m-5; } .message { @apply m-5; } .form { @apply m-5; } .input { @apply p-1 border-solid border-2 border-gray-400; } .button { @apply ms-1 px-4 py-2 bg-gray-800 text-white text-sm rounded-lg; }
■ルーティングとページ遷移 src/app/page.tsx
'use client' import { useState } from 'react' import Link from 'next/Link' export default function Home() { const [name, setName] = useState('') const [message, setMessage] = useState('名前を入力してください。') const doInput = (e: any)=> { setName(e.target.value) } const doClick = (e: any)=> { e.preventDefault() setMessage('こんにちは、' + name + 'さん。') } return ( <main> <h1 className="title">Next.js</h1> <p className="message">{message}</p> <form className="form"> <input type="text" className="input" onChange={doInput} /> <button className="button" onClick={doClick}>クリック</button> </form> <div className="m-5"> <Link href="/other" className="text-blue-600 underline">Other pageへ</Link> </div> </main> ) }
src/app/other/page.tsx
'use client' import Link from 'next/Link' export default function Other() { return ( <main> <h1 className="title">Other page</h1> <p className="message">これは別のページです。</p> <div className="m-5"> <Link href="/" className="text-blue-600 underline">戻る</Link> </div> </main> ) }
■ローカルCSS ローカルCSSを作成し、「import './style.css'」で読み込むことができる これで src/app/globals.css の内容が上書きされる src/app/other/style.css
.title { @apply text-4xl text-red-600; }
src/app/other/page.tsx
'use client' import Link from 'next/Link' import './style.css' export default function Other() { return ( <main> <h1 className="title">Other page</h1> <p className="message">これは別のページです。</p> <div className="m-5"> <Link href="/" className="text-blue-600 underline">戻る</Link> </div> </main> ) }
■Styled JSX src/app/other/page.tsx
'use client' import Link from 'next/Link' import './style.css' import JSXStyle from 'styled-jsx/style' export default function Other() { return ( <main> <JSXStyle> {`p.message { text-align: center; font-weight: bold; }`} </JSXStyle> <h1 className="title">Other page</h1> <p className="message">これは別のページです。</p> <div className="m-5"> <Link href="/" className="text-blue-600 underline">戻る</Link> </div> </main> ) }
■ダイナミックルーティング src/app/list/[id]/page.tsx
'use client' import Link from 'next/Link' export default function List({params}:{params:{id: number}}) { return ( <main> <h1 className="title">Lis page</h1> <p className="message">指定されたIDは「{params.id}」です。</p> <div className="m-5"> <Link href="/" className="text-blue-600 underline">戻る</Link> </div> </main> ) }
http://localhost:3000/list/1 にアクセスすると「指定されたIDは「1」です。」と表示され、 http://localhost:3000/list/2 にアクセスすると「指定されたIDは「2」です。」と表示される src/app/list/page.tsx
'use client' import Link from 'next/Link' export default function List() { return ( <main> <h1 className="title">Lis page</h1> <p className="message">IDを指定してアクセスしてください。</p> <div className="m-5"> <Link href="/" className="text-blue-600 underline">戻る</Link> </div> </main> ) }
http://localhost:3000/list/ にアクセスすると「IDを指定してアクセスしてください。」と表示される ■クエリパラメータ src/app/query/page.tsx
'use client' import { useSearchParams } from 'next/navigation' export default function Query() { const params = useSearchParams() return ( <main> <h1 className="title">Query sample</h1> <p className="message">パラメータの取得。</p> <ul className="m-5"> <li>id: {params.get('id')}</li> <li>pass: {params.get('pass')}</li> </ul> </main> ) }
http://localhost:3000/query?id=test&pass=abcd1234 のようにアクセスすると、指定してidとpassの値が表示される

Advertisement