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 | 31 |
Tags
- 자바 구구단 출력
- 자바 switch문
- 자바
- Vue3
- 타입스크립트
- 자바 향상된 for문
- 자바 for문
- react with typescript
- 자바 public
- 프로그래머스
- MySQL
- react ag grid
- 자바 자동캐스팅
- 항해99
- 자바 반복문
- TypeScript
- 자바 조건문
- 자바 if문
- 정보처리기사실기
- 자바 삼항연산자
- 자바 강제 캐스팅
- java
- 변수
- 항해99 2기
- 자바 while문
- 이클립스 DB연동
- Til
- 자바 공배수
- 자바 스캐너
- 조코딩
Archives
- Today
- Total
뇌 채우기 공간
[REACT] React로 캘린더 만들기 (1) - Header에서 현재 날짜와 달을 표시하기 본문
이런 캘린더를 한번 만들어보자!
1. 프로젝트 생성
yarn create react-app calendar
프로젝트를 생성한다.
2. styled-components , moment 설치
yarn add styled-components
yarn add moment
3. 폴더구조
일단 이렇게 만들어줬다.
- pages -> 한 페이지
- components -> 중간 단위의 컴포넌트
- elements -> 최소 단위 컴포넌트
4. 최소단위 컴포넌트
일단 text 컴포넌트와 버튼 컴포넌트를 만들어보겠다.
Text 컴포넌트
elements/Text.js
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
31
|
import React from "react";
import styled from "styled-components";
const Text = (props) => {
const { bold, color, size, children, margin } = props;
const styles = {bold: bold, color: color, size: size, margin};
return (
<P {...styles}>
{children}
</P>
)
};
Text.defaultProps = {
children: null,
bold: false,
color: "#222831",
size: "14px",
margin: false,
};
const P = styled.p`
color: ${(props) => props.color};
font-size: ${(props) => props.size};
font-weight: ${(props) => (props.bold? "600" : "400")};
${(props) => (props.margin? `margin: ${props.margin};` : '')}
`;
export default Text;
|
cs |
Button컴포넌트
elements/Button.js
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
import React from "react";
import styled from "styled-components";
const Button = (props) => {
const { text, _onClick, is_float, children, margin, width,padding } = props;
if (is_float) {
return (
<React.Fragment>
<FloatButton onClick={_onClick}>{text? text : children}</FloatButton>
</React.Fragment>
);
}
const styles = {
margin: margin,
width: width,
padding: padding,
};
return (
<React.Fragment>
<ElButton {...styles} onClick={_onClick}>{text? text: children}</ElButton>
</React.Fragment>
);
};
Button.defaultProps = {
text: false,
children: null,
_onClick: () => {},
is_float: false,
margin: false,
width: '100%',
padding: "12px 0px",
};
const ElButton = styled.button`
width: ${(props) => props.width};
background-color: #212121;
color: #ffffff;
padding: ${(props) => props.padding};
box-sizing: border-box;
border: none;
${(props) => (props.margin? `margin: ${props.margin};` : '')}
`;
const FloatButton = styled.button`
width: 50px;
height: 50px;
background-color: #212121;
color: #ffffff;
box-sizing: border-box;
font-size: 36px;
font-weight: 800;
position: fixed;
bottom: 50px;
right: 16px;
text-align: center;
vertical-align: middle;
border: none;
border-radius: 50px;
`;
export default Button;
|
cs |
elements/index.js
1
2
3
4
|
import Text from "./Text";
import Button from "./Button";
export {Text, Button};
|
cs |
index.js를 만들어서 export를 한번에 해줄 수 있도록 만든다
5. Header와 Calendar만들기
components/Header.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import React from "react";
import {Text} from "../elements"
import styled from "styled-components";
const Header = (props) =>{
const { calendarYM, today} = props;
return(
<React.Fragment>
<Container>
<Text>{calendarYM}</Text>
<Text>{today}</Text>
</Container>
</React.Fragment>
);
}
const Container = styled.div`
flex-basis: 50px;
background-color: tomato;
`;
export default Header;
|
cs |
이부분이 Header이다.
여기서 props에서 받아오는 값은 밑에서 설명!
components/Calender.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import React from "react";
import styled from "styled-components";
const Calendar = (props) =>{
return(
<React.Fragment>
<Container>
</Container>
</React.Fragment>
);
}
const Container = styled.div`
flex-grow: 1;
background-color: lightgray;
`;
export default Calendar;
|
cs |
이 부분에 들어갈 것이 Calendar이다.
일단은 색상으로 구분을 해두었다.
이것도 index.js로 엮어서 export해주도록 했다.
6. page만들기
pages/FullCalendar.js
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
31
32
33
34
35
36
37
38
39
|
import React from "react";
import { Header, Calendar } from '../components';
import moment from "moment";
import styled from "styled-components";
function FullCalendar() {
const [calendarYM , setCalendarYM] = React.useState("");
const [today , setToday] = React.useState("");
React.useEffect(()=>{
setCalendarYM(moment().format("YYYY년 MM월"));
setToday(moment().format("현재 YYYY - MM - DD"));
},[]);
return (
<Layout >
<Container>
<Header
calendarYM = {calendarYM}
today= {today}
/>
<Calendar/>
</Container>
</Layout>
);
}
const Layout = styled.div`
width: 100vw;
height: 80vh;
border: 1px solid black;
`;
const Container = styled.div`
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
`;
export default FullCalendar;
|
cs |
요것이 전체 화면이다.
여기서 moment로 현재 날짜를 가져와서 Header에 넘겨주고 있다.
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import React from "react";
import FullCalendar from "./pages/FullCalendar";
function App() {
return (
<FullCalendar/>
);
}
export default App;
|
cs |
App.js에서 부른다.
<결과>
이렇게 현재 날짜를 잘 불러왔다.
728x90
'WEB > REACT' 카테고리의 다른 글
[REACT] 리액트 심화반 강의 프로젝트 만들기 순서를 알려주겠다. (0) | 2021.07.06 |
---|---|
[REACT] React로 캘린더 만들기 (2) - month이동하기, 요일써주기 (0) | 2021.07.05 |
[REACT] 컴포넌트 쪼개기/ 포스트 보이는 메인페이지 만들기 / 최소단위 컴포넌트 만들기 / Grid와 이미지 컴포넌트 (2) (0) | 2021.07.02 |
[REACT] 컴포넌트 쪼개기/ 포스트 보이는 메인페이지 만들기 / 가장 큰 단위, 중간단위 (1) (0) | 2021.07.02 |
[REACT] 리액트 프로젝트 세팅/ 크롬 react 확장 프로그램 (0) | 2021.07.02 |