💣 Next.js_02 Dynamic Routes, next/link
Next.js
Anma Nextをエンコードします。講義.
🔪 axios
axios
axios
インストール$ npm i axios
import Axios from "axios";
import Head from "next/head";
import { useEffect } from "react";
export default function Home() {
const API_URL =
"http://makeup-api.herokuapp.com/api/v1/products.json?brand=maybelline";
// 최초에 진입했을 때 데이터 호출을 위한 함수
function getData() {
Axios.get(API_URL).then((res) => {
// API 호출이 잘 되는지 확인
console.log(res);
});
}
// 최초에 진입했을 때 한 번만 호출하면 되므로 useEffect 사용
useEffect(() => {
getData();
}, []);
return (
<div>
<Head>
<title>Home | 보리구리</title>
</Head>
</div>
);
}
🔪 useEffect
userEffectを使用して、マウント/アンロード/更新時に実行するアクションを設定します。
useEffectの利用
import React, { useEffect } from 'react';
function User({ user }) {
useEffect(() => {
console.log('컴포넌트가 화면에 나타남');
return () => {
console.log('컴포넌트가 화면에서 사라짐');
};
}, []);
useEffect
最初のパラメータ:関数useEffect
2番目のパラメータ:依存値を含む配列(deps)マウント操作
props
受信値を素子のローカル状態setInterval
/通過setTimeout
|重複タスクのスケジュールアンインストール操作
setInterval
,setTimeout
使用登録タスクclear
(clearInterval
,clearTimeout
)deps
空の配列:最初の呼び出し関数のみ
特定の値を入力
useEffect
内で使用しますが、propsがあればuseEffect
のdeps
に入れます.(ルール)パラメータをスキップ
deps
パラメータが省略されている場合は、要素を再レンダリングするたびに🔪 useState
useStateによる構成部品の置換値の管理
反応16.8以前のバージョンでは、関数型素子は状態を管理できなかったが、反応16.8にHooks機能が導入されるにつれて、関数型素子も状態を管理できるようになった.
イベントの設定
import React from 'react';
function Counter() {
const onIncrease = () => {
console.log('+1');
}
const onDecrease = () => {
console.log('-1');
}
return (
<div>
<h1>0</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
useState
useState
関数によって構成部品の状態を管理できるimport React, { useState } from 'react';
// 리액트 패키지에서 useState 함수를 불러옴
function Counter() {
const [number, setNumber] = useState(0);
// number : 현재 상태(첫 번째 원소)
// setNumber : Setter 함수(두 번째 원소)
// Setter 함수 : 파라미터로 전달받은 값을 최신 상태로 설정
const onIncrease = () => {
setNumber(number + 1);
}
const onDecrease = () => {
setNumber(number - 1);
}
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
🔪 Dynamic Routes
[]
のjsファイルを作成/post/1
、/post/abc
など同じURLに接続すると、pages/post/[pid].js
ページに移動します.[pid]
パスが1
かabc
かを取得し、import { useRouter } from 'next/router'
const Post = () => {
const router = useRouter()
const { pid } = router.query
return <p>Post: {pid}</p>
}
export default Post
🔪 next/link
<a>
用法と同じimport Link from 'next/link'
function Home() {
return (
<ul>
<li>
<Link href="/">
<a>Home</a>
</Link>
</li>
<li>
<Link href="/about">
<a>About Us</a>
</Link>
</li>
</ul>
)
}
export default Home
<a>
を囲む基準要素であれば、<Link>
はpassHref
属性を必要とする.=>styled-componsesのようなライブラリを使用する場合、
passHref
には属性がありません.<a>
にはhref
の属性はありません.passHref
属性に追加されていません<a>
機能しません=>クラスを
<a>
に追加することで、スタイル解決を指定します.カスタム構成部品を使用しませんimport Link from 'next/link'
import styled from 'styled-components'
function NavLink({ href, name }) {
// passHref속성을 Link에 추가
return (
<Link href={href} passHref>
<RedLink>{name}</RedLink>
</Link>
)
}
export default NavLink
// <a>를 감싸는 커스텀 컴포넌스가 생성
const RedLink = styled.a`
color: red;
`
🔪 next/router
|使用
<Link>
ではなくnext/router
リンクページ|使用
next/router
アクセスパス名およびレンダリングコンポーネントimport { useRouter } from "next/router";
import { Menu } from "semantic-ui-react";
export default function Gnb() {
const router = useRouter();
let activeItem = "home";
if (router.pathname === "/") {
activeItem = "home";
} else if (router.pathname === "/about") {
activeItem = "about";
}
function golink(e, data) {
if (data.name === "home") {
router.push("/");
} else if (data.name === "about") {
router.push("/about");
}
}
return (
<div>
<Menu inverted>
<Menu.Item
name="home"
active={activeItem === "home"}
onClick={golink}
/>
<Menu.Item
name="about"
active={activeItem === "about"}
onClick={golink}
/>
</Menu>
</div>
);
}
なぜnext/linkまたはnext/routerを使用するのですか?
<a>
, location.href
=>ページが更新されて移動します=>ページが再描画されます.=要求がどんどん増える
=>単一ページアプリケーションのメリットの消失
next/link
, next/router
=>ページはそのままで、中身だけを変更します.Reference
この問題について(💣 Next.js_02 Dynamic Routes, next/link), 我々は、より多くの情報をここで見つけました https://velog.io/@qhflrnfl4324/Next.js02-Dynamic-Routes-nextlinkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol