: React 어플리케이션에서 클라이언트 사이드 라우팅을 구현하기 위한 라이브러리. 여러 페이지 이동을 가능하게 하는 라이브러리
Router.js
작성 - url 1개당 페이지 컴포넌트 연결App.js
에 Router 적용
// Router.js
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="about" element={<About />} />
<Route path="contact" element={<Contact />} />
<Route path="works" element={<Works />} />
</Routes>
</BrowserRouter>
useNavigate
: 코드를 통한 path 이동useLocation
: 현재 path 정보 확인Link
: a
태그를 대체하는 태그Link
태그를 사용해서 구현해야 함. a 태그를 사용하면 페이지가 이동하면서 브라우저가 새로고침 되기 때문: 컴포넌트 태그 사이에 들어가는 내용 (props.children)
: path에 유동적인 값을 넣어 특정 페이지로 이동하도록 구현하는 방법
path/:id
로 설정하여 동적 페이지 이동 가능:id
는 url에 따라 바뀌는 값. useParams
hook으로 조회 가능<Route path="page/:id" element={<Page />} />
// Works.js
import { Link } from 'react-router-dom';
const data = [
{ id: 1, todo: '리액트 배우기' },
{ id: 2, todo: '노드 배우기' },
];
function Works() {
return (
<div>
{data.map((work) => (
<div key={work.id}>
<Link to={`/works/${work.id}`}>{work.todo}</Link>
</div>
))}
</div>
);
}
// Work.js
import { useParams } from 'react-router-dom';
const data = [
{ id: 1, todo: '리액트 배우기' },
{ id: 2, todo: '노드 배우기' },
];
function Work() {
const { id } = useParams(); // useParams hook을 통해 쿼리 파라미터 추출
const work = data.find((item) => item.id === parseInt(id));
return <div>{work?.todo}</div>;
}
// 라우터 단
<Routes>
<Route path="/" element={<Home />} />
<Route path="works" element={<Works />} />
<Route path="works/:id" element={<Work />} />
</Routes>
setTimeout
, addEventListener
, api 서버 통신 로직이 대표적인 비동기 코드
console.log("1");
setTimeout(() => console.log("2"), 3000); // 비동기 코드
console.log("3");
// 실행 순서 → 1 → 3 → 2
: 콜백 함수 중첩이 많아져 들여쓰기가 깊어지고 가독성이 안좋아지는 문제
setTimeout(() => {
console.log('아메리카노')
setTimeout(() => {
console.log('밍밍한 아메리카노')
...
}, 500)
}, 500)
: 비동기 작업을 표현하는 객체, 3가지 상태를 가짐
axios.get("/api")
.then(res => console.log("성공:", res)) // 성공 시 실행
.catch(err => console.log("실패:", err)) // 실패 시 실행
.finally(() => console.log("항상 실행")); // 무조건 실행
const getWeather = async () => {
try {
const response = axios.get('/api');
console.log('성공' + response);
} catch (error) {
console.log('실패' + error);
}
}
: 어떤 자원에 대해 CRUD를 진행할 수 있게 HTTP method를 사용하여 요청을 보내는 것. REST 원칙을 적용하여 설계한 API
GET
메소드를 Last-Modified
값과 함께 보낼 경우, 컨텐츠의 변화가 없을 때 캐시된 값을 사용하게 된다. 이렇게 되면 네트워크의 응답시간 뿐만 아니라 API 서버에 요청을 발생시키지 않기 때문에 부담이 덜하다는 장점을 가지게 된다./users/10
와 같이 경로에 값을 포함하는 경우/users?id=10
와 같이 ?key-value
형태로 정렬, 필터링 같은 조건 검색에 적합함: JavaScript Object Notation. 자바스크립트 객체 문법을 토대로 문자 기반의 데이터 교환 형식
console.log(JSON.stringify({ x: 5, y: 6 }));
// "{"x":5,"y":6}"
const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);
console.log(obj.count);
// 42
console.log(obj.result);
// true