오늘의 결과물 ✨
1. create-react-app 설치
yarn create react-app 30days-challenge
2. styled-components
react에서 컴포넌트에 CSS를 적용시키는 방법은 다양했다.
보통은 html, css, js 파일을 분리해서 작성하지만 react CSS-in-JS 관련 라이브러리인 styled-components를 사용해보고 싶어서 블로그랑 노마드 코더 유튜브 강의 보고 대충 사용법을 익혔다.
보고 따라하면 이해가 되는 듯 싶다가도 막상 직접 하려니깐 막막했다. 그래도 구글링 하고, 어제 본 코드 다시 보고 공식 문서도 보면서 하니깐 왜 쓰는지 정도는 조금 알거 같은..?
결국은 보여지는게 중요하니깐 css관리하는게 중요한데, 하나의 컴포넌트 파일안에 같이 관리할 수 있어서 보기도 좋고 props 같은거 활용해서 재사용도 가능하고 여러모로 편리한 거 같다.
yarn add styled-components
2-1. styled-reset
- CSS 초기화
yarn add styled-reset
2-2. global-style.js
-
전역으로 관리할 CSS
import { createGlobalStyle } from 'styled-components'; import reset from 'styled-reset'; const GlobalStyle = createGlobalStyle` ${reset} // Globalstyle 설정 body{ background-color: #e8f1e9; font-family: 'Montserrat', sans-serif; } ` export default GlobalStyle;
2-3. theme.js
- 공통으로 관리할 CSS
- color 테마 바꿀 때 유용하게 사용할 듯. 아직 사용방법이 미숙하다.
- css root에 변수로 지정해서 하는 방법이랑 유사한거 같다.
- ThemeProvider 하위에 있는 컴포넌트에서 사용할 수 있다.
export const theme = {
colors : {
mainColor: '#447d53',
subColor: '#d4e2d4',
darkGrayColor: '#333',
grayColor: '#999',
}
import styled, { ThemeProvider } from 'styled-components';
class Template extends Component {
const Component = styled.div`
color: ${({ theme }) => theme.colors.mainColor};
`
render () {
return (
<>
<ThemeProvider theme={theme}>
//Component
</ThemeProvider>
</>
)
}
}
3. Template
- 나는 일단 리액트 초보이기 때문에 큰 컴포넌트에서 작은 컴포넌트로 쪼갤 예정이라서 일단 한꺼번에 작성했다.
- AddButton을 클릭하면 Form을 입력할 수 있는 Modal창이 나타나게끔 구현할 예정.
class Template extends Component {
render () {
return (
<>
<ThemeProvider theme={theme}>
<Header>You will never change your life until you change something you do daily.</Header>
<Container>
<Title>30days</Title>
<Board>
<AddMessage>
<AddButton/>
There are no challenge yet.<br /> Click + button to add your first challenge.
</AddMessage>
</Board>
</Container>
</ThemeProvider>
</>
)
}
}
3-1 Styled-icons
- styled-components의 icon 라이브러리.
- react icon 그냥 써도 되는데 쓰는김에 통일 시키는게 나을거 같았다.
- 여기서 약간 삽질했다. 설치를 해도 pagkage.json에 안나타나길래 import도 안되고 자꾸 오류나서 styled-icons/material 만 따로 설치하니깐 됐다.... 어차피 한 종류만 쓰는게 통일감 있을거 같아서 결과적으론 더 나은거같다.
- svg라서 color 바꿀땐 fill로 바꿔줘야한다.
import { AddCircleOutline } from '@styled-icons/material';
const AddButton = styled(AddCircleOutline)`
display: block;
fill: ${({ theme }) => theme.colors.subColor};
width: 70px;
margin: 0 auto 0.5rem;
cursor: pointer;
transition: 0.2s;
&:hover {
fill: ${({ theme }) => theme.colors.mainColor};
}
class Template extends Component {
render () {
return (
<>
<AddButton/>
</>
)
}
}
해야할 것
◻️ addButton에 click이벤트 구현
◻️ modal 컴포넌트 구현
역시 100번 보는 것보다 한 번 직접 해보는게 큰 도움이 되는것 같다. 삽질도 여러번 할거 같다.
지금 약간 조립 설명서가 누락된 레고를 완성사진만 보면서 조립하는 느낌이 든다.
대신 커스터마이징이 가능하니깐 내 마음대로 만들 수 있어서 좋은듯
이제 그 다음은 Modal창 구현을 해야겠다. 한 번 해본 적은 있는데 다시 내 프로젝트에 적용시키면서
정리해놓아야 겠다.
'프로젝트' 카테고리의 다른 글
Step4. useReducer, edit, reset, checkMessage (0) | 2020.07.09 |
---|---|
step3. Cell Table + Counter (0) | 2020.07.04 |
step2. Modal + Form (0) | 2020.07.02 |
intro_ 30days (0) | 2020.06.19 |