```
npm i axios styled-components react-router-dom qs
```
1. 라우터 설정하기
2. 컴포넌트 만들어서 import 하기
default 속성들도 미리 넣어놓자
3. Main 컴포넌트
import { Link } from "react-router-dom";
import styled from "styled-components";
import { Title } from "../atoms/index";
const Main = () => {
return (
<>
<Title>영화 & 책 검색 사이트</Title>
<Wrapper>
<Link to="/movie">
<BtnLink>영화 검색</BtnLink>
</Link>
<Link to="/book">
<BtnLink>책 검색</BtnLink>
</Link>
</Wrapper>
</>
);
};
const Wrapper = styled.div`
//위치
display: flex;
flex-direction: column;
align-items: center;
margin-top: 60px;
//크기
//꾸미기
`;
const BtnLink = styled.button`
//위치
margin: 20px;
width: 300px;
height: 100px;
//크기
font-size: 1.5rem;
//꾸미기
background-color: #fff;
border: 1px solid black;
cursor: pointer;
border-radius: 4px;
`;
export default Main;
4. Movie 컴포넌트
이번에야말로 CSS Grid를 익혀보자 – 1분코딩 (studiomeal.com)
이번에야말로 CSS Grid를 익혀보자
이 포스트에는 실제 코드가 적용된 부분들이 있으므로, 해당 기능을 잘 지원하는 최신 웹 브라우저로 보시는게 좋습니다. (대충 인터넷 익스플로러로만 안보면 된다는 이야기) 이 튜토리얼은 “
studiomeal.com
CSS, 반응형 웹 하루만에 정리하기 (velog.io)
CSS, 반응형 웹 하루만에 정리하기
조금 특이한 선택자들가상 클래스가상 요소속성inherit를 사용하면 부모요소의 높이값이 강제상속될 수 있다.위와 같이 존재하는데 위쪽 3개만 많이 쓴다.인라인(a, button, i, img, input, label, script, se
velog.io
나도 grid가 뭔지 모른다.
.conatiner {
display : grid;
/* display : inline-grid; */
grid-template-columns: 200px 200px 500px;
/* grid-template-columns: 1fr 1fr 1fr : 비율대로 놓겠다*/
}
import styled from "styled-components";
import { Title } from "../atoms/index";
import MovieList from "../organisms/MovieList";
const Movie = () => {
return (
<div>
<Title>Movie</Title>
<Form>
<InputText />
<BtnSubmit>검색</BtnSubmit>
</Form>
<MovieList />
</div>
);
};
const Form = styled.form`
//위치
margin-top: 5%;
display: flex;
//크기
//꾸미기
border: 1px solid #22b8cf;
border-radius: 5px;
`;
const InputText = styled.input`
//위치
padding: 5px;
background-color: white;
background: none;
outline: none;
border: none;
font-size: 1.1rem;
line-height: 1.5;
flex: 1;
`;
const BtnSubmit = styled.button`
background: none;
outline: none;
border: none;
background-color: #22bfff;
color: white;
padding-left: 1rem;
padding-right: 1rem;
font-size: 1rem;
display: flex;
align-items: center;
cursor: pointer;
transition: 0.1s background ease-in;
&:hover {
background-color: #adb5bd;
}
`;
export default Movie;
대충 위와같이 작성하는데 주의해야하는 것은 Image에 크기를 반드시 넣어주자
5. TopNav 작성하기
보면 알겠지만 Link와 NavLink는 다름
구조는 위와같이
Container
Nav
NavLink
순으로 들어가야 됨
import styled from "styled-components";
import { NavLink } from "react-router-dom";
const NavItems = [
{ link: "/", name: "메인" },
{ link: "/movie", name: "영화" },
{ link: "/book", name: "책" },
];
const TopNav = () => {
return (
<Container>
<Nav>
{NavItems.map(({ link, name }) => (
<CustomeLink to={link}>
<LinkItem>{name}</LinkItem>
</CustomeLink>
))}
</Nav>
</Container>
);
};
const Container = styled.div`
display: flex;
align-items: center;
padding: 0 20px;
height: 50px;
background: #fff;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);
`;
const CustomeLink = styled(NavLink)`
&.active {
background-color: black;
color: white;
}
`;
const Nav = styled.nav`
display: flex;
align-items: center;
`;
const LinkItem = styled.div`
margin: 10px 15px;
`;
export default TopNav;
5. 이제 Movie 안의 내용 채우기
6. Movie 안의 내용 채우고 함께 네이버 API 받아오기
만들고 보니 데이터를 받아와야겠다
데이터가 잘 온다
이걸로 apis는 완성이다
import axios from "../../node_modules/axios/index";
export const Instance = axios.create({
headers: {
"X-Naver-Client-Id": "--------------------",
"X-Naver-Client-Secret": "--------------------",
},
});
import { Instance } from "./index";
const getMovieList = async (params) => {
const { data } = await Instance.get("/v1/search/movie.json", { params });
console.log(data);
return data;
};
export default getMovieList;
이제 데이터들을 Movie List로 보내주자
Title 안에 dangerouslySetInnerHTML을 붙여주어야 한다. 그래서 JS를 실행할 수 있는 가능성이 생기기 떄문에 이렇게 쓰는 것은 유의해야한다.
'Development(Web, Server, Cloud) > 22) React.js & Node.js' 카테고리의 다른 글
React.js & Node.js 18일차 - JWT, 회원가입, 로그인 구현 (0) | 2022.01.21 |
---|---|
React.js & Node.js 17일차 : 인스타 디자인 (0) | 2022.01.21 |
React.js & Node.js 16일차 : 네이버API 서버구현하기 + 인스타 골격, URL, URI (0) | 2022.01.18 |
React.js & Node.js 15일차 : React-Router dom v6 (0) | 2022.01.17 |
React.js & Node.js 14일차 : 영화./책 검색사이트 (0) | 2022.01.12 |