728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ styled-components ์ค์นํ๊ธฐ
- Component ๊ฐ ๋ง์์ง๋ฉด ์คํ์ผ๋ง์ ํ๋๋ฐ ์๋์ ๊ฐ์ด ๋ค์ ๋ถํธํจ์ด ์๊ธฐ๊ธฐ๋ ํ๋ค.
- class ๋ฅผ ๋ง๋ค์ด ๋์ ๊ฒ์ ๊น๋จน๊ณ ์ค๋ณตํด์ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
- ๊ฐ์๊ธฐ ๋ค๋ฅธ ์ด์ํ Component ์ ์ํ์ง ์๋ ์คํ์ผ์ด ์ ์ฉ๋๋ค.
- CSS ํ์ผ์ด ๋๋ฌด ๊ธธ์ด์ ธ์ ์์ ์ด ์ด๋ ต๋ค.
- ๊ทธ๋์ styled-components ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด Component ๋ฅผ ์ ์ํ ๋ ์คํ์ผ์ ๋ฐ๋ก ์ ํ์ Component ๋ฅผ ๋ง๋ค์ด๋ฒ๋ฆฌ๋ ๊ฒ ๊ฐ๋ฅํด์ง๋ฏ๋ก ์ด๋ฌํ ๋ถํธํจ์ ์ค์ผ ์๊ฐ ์๋ค.
๐ค styled-components ์ค์นํ๊ธฐ
// npm ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ
npm install styled-components
// yarn ์ด ์ค์น๋ ๊ฒฝ์ฐ
yarn add styled-components
- ํฐ๋ฏธ๋์ ์ด๊ณ ์ ์ฝ๋ ์ค ํ๋๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋๋ค.
import styled from 'styled-components';
- ์ค์น๊ฐ ์๋ฃ๋๋ฉด styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ ์ปดํฌ๋ํธ๊ฐ ์๋ ํ์ผ ์ต์๋จ์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ ๋ ฅํ์ฌ styled ๋ฅผ import ํด์จ๋ค.
๐ styled-components ์ฌ์ฉํ๊ธฐ
- styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ์ผ์ ๋ฏธ๋ฆฌ ์ ํ Component ๋ฅผ ๋ง๋ค ์ ์๋ค.
// ์ ์ฒด ์ฝ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
// ์ฝ๋์ ๋ด์ฉ์ด ๊ธธ์ด์ ๋ถํ์ํ ๋ถ๋ถ์ ์ ์ธํ๋ค.
import styled from 'styled-components';
let Box = styled.div`
margin: 10px;
padding: 20px 0;
`
let Title = styled.h1`
font-size: 40px;
font-weight: bold;
color: #484848;
`
function Detail(props) {
return (
<div className="container">
<Box>
<Title>Detail</Title>
</Box>
</div>
)
}
- ์ ์ฝ๋์์ div ํ๊ทธ์ ์คํ์ผ์ ์ ํ Box ๋ผ๋ Component ๋ฅผ, h1 ํ๊ทธ์ ์คํ์ผ์ ์ ํ Title ์ด๋ผ๋ Component ๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
- ํน์ ํ๊ทธ์ ์คํ์ผ์ ์ ํ์ฃผ๊ณ ์ถ์ผ๋ฉด styled.ํ๊ทธ ์ ํํ๋ก ์์ฑํ๋ฉด ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ค๋ฅธํธ์ ๋ฐฑํฑ( ` ) ๊ธฐํธ๋ฅผ ๋ฐ์ดํ์ฒ๋ผ ๋ฃ์ด ๊ทธ ์ฌ์ด์ ์ํ๋ ์คํ์ผ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก ์์ฑ๋ ์คํ์ผ์ ๋ณ์์ ์ ์ฅํ๋ฉด ๋ณ์๋ช ์ด ๊ณง Component ๊ฐ ๋๋ค.
- ์ฐธ๊ณ ๋ก Component ๋ฅผ ๋ง๋ค์ด์ค ๊ฒ์ด๋ฏ๋ก Box, Title ๊ณผ ๊ฐ์ด ๋งจ ์์ ๊ธ์๋ ์์ด ๋๋ฌธ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ด๋ ๊ฒ ์คํ์ผ์ ์ ํ๋์ Component ๋ฅผ html ์ฝ๋ ์ฌ์ด ์ํ๋ ์์น์ ๋ฃ์ด์ฃผ๋ฉด ์์ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ฐ์์ด ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐ props ๋ก ์คํ์ผ๋งํ๊ธฐ
- ๋์์ธ์ ํ๋ค๋ณด๋ฉด ๊ฐ๋ ๋น์ทํ UI ๊ฐ ์ฌ๋ฌ ๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ์ด ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ ๋ฐ๋ก props ๋ก ์คํ์ผ๋งํ๋ ๊ฒ์ด๋ค.
// ์ ์ฒด ์ฝ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
// ์ฝ๋์ ๋ด์ฉ์ด ๊ธธ์ด์ ๋ถํ์ํ ๋ถ๋ถ์ ์ ์ธํ๋ค.
import styled from 'styled-components';
let Box = styled.div`
margin: 10px;
padding: 20px 0;
`
let Title = styled.h1`
font-size: 40px;
font-weight: bold;
color: ${ props => props.color }
`
function Detail(props) {
return (
<div className="container">
<Box>
<Title color="red">Detail(RED)</Title>
<Title color={"#484848"}>Detail(DARKGRAY)</Title>
</Box>
</div>
)
}
- ์๋ฅผ ๋ค์ด, Title ์ด๋ผ๋ Component ๋ฅผ ๋ค๋ฅธ CSS ์์ฑ์ ๊ทธ๋๋ก ๋๊ณ ๊ธ์์๋ง ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ์.
- ๊ทธ๋ฌ๋ฉด Titile Component ๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด Component ๋ฅผ ๋ง๋ ํ์ color ์์ฑ์ ์์ ํ๋ ๊ฒ๋ณด๋ค๋ props ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๋ฉด ํจ์ฌ ๊ฐํธํ๊ณ ๊น๋ํด์ง๋ค.
- props ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฐ์ color ์์ฑ์ ๋ฃ์ด์ค ํ ์์์ ๊ธฐ์ ํ๋ ๋ถ๋ถ์ ์์๋ช ํน์ ์์์ฝ๋ ๋์ ${ color => props.color } ๋ผ๋ code ๋ฅผ ๋ฃ์ด์ค๋ค.
- ์ฐ์ , ${ } ๋ผ๋ ๋ฌธ๋ฒ์ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๋ฐฑํฑ ( ` ) ๊ธฐํธ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ES6 ๋ฌธ๋ฒ์ธ๋ฐ, ๋ฌธ์ ์ค๊ฐ์ค๊ฐ์ ํจ์๋ ๋ณ์๋ฅผ ๋ฃ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ props.color ๋ผ๋ props ๋ณ์๋ฅผ ์ง์ด๋ฃ์ผ๋ฉด ๋๋๋ฐ, ์ง์ด๋ฃ์ ๋ ${ props.color } ์ ํํ๋ก ๋ฃ๋ ๊ฒ ์๋๋ผ ์์ ๊ฐ์ด ๊ผญ ์ฝ๋ฐฑํจ์์ ํํ๋ก ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
- ๊ทธ๋ฌ๋ฉด ์ด์ ์์์ ๊ธฐ์ ํ๋ ๋ถ๋ถ์ ๋ค์ด๊ฐ ์์๋ช ํน์ ์์์ฝ๋๋ html ์ ์์ฑ๋ Component ์์ ๋ฐ์์ฌ ์ ์๋ค.
- Title ์ด๋ผ๋ Component ๋ค์ ๋ณด๋ฉด color ๋ผ๋ ๋ณ์์ ๊ฐ๊ฐ red, {'#484848'} ์ด๋ผ๋ ๊ฐ์ ์ ์ฅํ์ฌ props ๋ก ์ ์กํ๊ณ ์๋ค.
- ๊ทธ๋ฅ ์ผ๋ฐ ํ ์คํธ๋ฅผ ์ ๋ฌํ๊ณ ์ถ์ผ๋ฉด ๋ฐ์ดํ ์์ ์์ฑํ๋ฉด ๋๊ณ , ๋ณ์๋ ์๋ฃํ์ ๋ด๊ณ ์ถ์ผ๋ฉด ์ค๊ดํธ ์์ ์์ฑํ๋ฉด ๋๋ค.
- ๊ทธ๋์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ๋ก ํ์ธํ๋ฉด ๊ฐ๊ฐ ์คํ์ผ์ด ์ ์ ํ์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
๐ styled-components ์ฅ์
- ์คํ์ผ์ ๋ฃ์ ๋ ๋ค๋ฅธ ํ์ผ์ด๋ Component ์ด๋ฆ์ด ๊ฒน์ณ๋ CSS ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- Component ์คํ์ผ ์์ ์ ํ๊ณ ์ถ์ ๋ CSS ๊ฐ ์๋๋ผ Component ํ์ผ์ ์ฐพ์ผ๋ฉด ๋๋ฏ๋ก ์์ ์ด ์ฉ์ดํ๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] useEffect ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.03.25 |
---|---|
[React] CSS ๋์ SASS ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.03.25 |
[React] React Router 3 : URL ํ๋ผ๋ฏธํฐ๋ก ์์ธ ํ์ด์ง 100๊ฐ ๋ง๋ค๊ธฐ (0) | 2022.03.24 |
[React] React Router 2 : Link, Switch, history ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (0) | 2022.03.24 |
[React] React Router : ์ ํ ํ ๊ธฐ๋ณธ ๋ผ์ฐํ ํด๋ณด๊ธฐ (0) | 2022.03.24 |