Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 메일 보내기 react
- nextjs 메일보내기
- react
- 빈도수세기
- swiper
- robots.txt
- CSS
- github
- React 나이스 신원인증
- 알고리즘
- 카카오지도 구현
- pass인증
- 구글 메일보내기
- 카카오맵 api
- 프로그래머스
- Next.js 나이스 본인인증
- react swiper
- next15
- JavaScript
- 사이트맵
- nextjs contact us
- 함수
- Til
- web3-react
- App Router
- 프론트 본인인증
- use Client
- nextjs
- 전체 너비로 css
- 다중포인터
Archives
- Today
- Total
YEV.log
React | API Data (json) 중복 map 사용 하기 본문
1주차에 보라님이 상수 데이터로 구현했던 nav 바의 카테고리 목록을 2주차에는 백엔드에서 주는 API 데이터로 교체해야하는 상황이 오게 되었다. 보라님의 코드에서 상수데이터를 API 데이터로 교체 + 내가 구현한 카테고리별 쿼리 파라미터 주소를 link 연결하는것이 목표이다.
구현 기능
상수데이터를 API 데이터로 교체 + 내가 구현한 카테고리별 쿼리 파라미터 주소를 link 연결하기 |
⭐Key Point
- API 데이터 분석
- map 메소드 이중으로 사용하여 카테고리 이름 표시
- 개별 링크 연결
Output
Code
🥕 API Data
${BASE_URL}/categories
더보기
{
"results": [
{
"category_id": 1,
"category_name": "샤워",
"sub_categories": [
{
"sub_category_id": 1,
"sub_category_name": "샴푸바"
},
{
"sub_category_id": 2,
"sub_category_name": "솝"
},
{
"sub_category_id": 3,
"sub_category_name": "샤워젤"
},
{
"sub_category_id": 4,
"sub_category_name": "배쓰밤"
},
{
"sub_category_id": 5,
"sub_category_name": "용품"
}
]
},
{
"category_id": 2,
"category_name": "보디",
"sub_categories": [
{
"sub_category_id": 6,
"sub_category_name": "바디 로션"
},
{
"sub_category_id": 7,
"sub_category_name": "바디 미스트"
},
{
"sub_category_id": 8,
"sub_category_name": "바디 오일"
},
{
"sub_category_id": 9,
"sub_category_name": "바디 스크럽"
}
]
},
{
"category_id": 3,
"category_name": "페이스",
"sub_categories": [
{
"sub_category_id": 10,
"sub_category_name": "폼 클렌징"
},
{
"sub_category_id": 11,
"sub_category_name": "팩"
},
{
"sub_category_id": 12,
"sub_category_name": "스킨"
},
{
"sub_category_id": 13,
"sub_category_name": "로션"
}
]
},
{
"category_id": 4,
"category_name": "헤어",
"sub_categories": [
{
"sub_category_id": 14,
"sub_category_name": "헤어 에센스"
},
{
"sub_category_id": 15,
"sub_category_name": "헤어 미스트"
},
{
"sub_category_id": 16,
"sub_category_name": "헤어 스프레이"
},
{
"sub_category_id": 17,
"sub_category_name": "드라이 샴푸"
}
]
}
]
}
🥕 Nav.js
더보기
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { HiOutlineSearch } from 'react-icons/hi';
import { HiShoppingCart } from 'react-icons/hi';
import { FaUserCircle } from 'react-icons/fa';
import { API } from '../../config';
import { MENUS } from './NavData';
import '../Nav/Nav.scss';
export default class Nav extends Component {
constructor(props) {
super(props);
this.state = {
visible: false,
category: [],
};
}
onUpdateVisible = isVisible => {
this.setState({ visible: !isVisible });
};
componentDidMount() {
fetch(`${API.categories}`)
.then(res => res.json())
.then(data => {
this.setState({
category: data.results,
});
});
}
render() {
const { visible, category } = this.state;
return (
<nav onMouseLeave={() => this.onUpdateVisible(true)}>
<div className="innerNav">
<h1 className="logo">
<Link to="/productlist?category=1">
<img src="/images/logo.png" alt="wash korea logo" />
</Link>
</h1>
<div className="gnbWrapper">
<ul className="gnb">
{MENUS.map((menu, idx) => {
const isProductMenu = !(menu === '제품');
return (
<li
key={idx}
onMouseEnter={() => {
this.onUpdateVisible(isProductMenu);
}}
>
<Link to="/">{menu}</Link>
</li>
);
})}
</ul>
</div>
<div className="users">
<Link to="/">
<HiOutlineSearch className="icon" />
</Link>
<Link to="/">
<HiShoppingCart className="icon" />
</Link>
<Link to="/login">
<FaUserCircle className="icon" />
</Link>
</div>
</div>
{visible && (
<div className="lnbWrapper">
<div className="lnb">
{category.map(menu => {
return (
<ul className="SubMenu" key={menu.category_id}>
<li key={menu.category_id}>
<Link to={`/productlist?category=${menu.category_id}`}>
{menu.category_name}
</Link>
</li>
{menu.sub_categories.map(subMenu => {
return (
<li key={subMenu.sub_category_id}>
<Link
to={`/productlist?category=1&sub_category=${subMenu.sub_category_id}`}
>
{subMenu.sub_category_name}
</Link>
</li>
);
})}
</ul>
);
})}
</div>
</div>
)}
</nav>
);
}
}
반응형
'Web > React & Next.js' 카테고리의 다른 글
React 초기 세팅, CRA 세팅하기 (Router v6 / styled-component) (0) | 2022.01.05 |
---|---|
React | 카테고리 필터링, 동적 라우팅 기능 (0) | 2021.11.14 |
React | 상수 데이터 / mock data (0) | 2021.11.07 |
React | State & Props & Event (0) | 2021.10.31 |
React | Component 와 생명주기 (0) | 2021.10.26 |