-> ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ
-> ๋ค์ CDD ์ง์ ๋๊ตฌ ์กด์ฌ
-> ๊ทธ ์ค ํ๋๊ฐ Component Explorer(์ปดํฌ๋ํธ ํ์๊ธฐ)
-> Component Explorer ์ค ํ๋๊ฐ Storybook
(CSS -> SASS -> BEM -> Styled Components)
-> CDD๋ก CSS ์์ฑ โ
๋ค์ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์กด์ฌ
-> ๊ทธ ์ค ๋์ค์ ์ธ Styled Components
๊ธฐ์กด ๋์ ๋ง๋๋ ๋ฐฉ์์ธ css, scss ํ์ผ์ ๋ฐ์ ๋๊ณ , ํ๊ทธ๋ id, class์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ ์ฐ์ง ์๊ณ , ๋์ผํ ์ปดํฌ๋ํธ์์ ์ปดํฌ๋ํธ ์ด๋ฆ์ ์ฐ๋ฏ ์คํ์ผ์ ์ง์ ํ๋ ๊ฒ์ styled-components๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
css ํ์ผ์ ๋ฐ์ ๋์ง ์๊ณ , ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ฃ๊ธฐ ๋๋ฌธ์, css๊ฐ ์ ์ญ์ผ๋ก ์ค์ฒฉ๋์ง ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ์ฅ์ ์ด ์์ต๋๋ค.
const ์ปดํฌ๋ํธ๋ช = styled.ํ๊ทธ๋ช ์คํ์ผ ๋ฃ๊ธฐ...๋ฌธ๋ฒ์ผ๋ก ๋ง๋ค์ด์ง๋๋ค.
๋ง๋ค๊ณ ์ํ๋ ์ปดํฌ๋ํธ์ render ํจ์ ๋ฐ์์ ๋ง๋ญ๋๋ค.
styled-component๋ฅผ ์ฌ์ฉํ๋ ์ฅ์ ์ค ํ๋๊ฐ ๋ณ์์ ์ํด ์คํ์ผ์ ๋ฐ๊ฟ ์ ์๋ค๋ ์ ์ ๋๋ค.
์ ์์๋ฅผ ๋ณด๋ฉด email์ด๋ผ๋ state๊ฐ์ ๋ฐ๋ผ ExampleWrap์ prop์ผ๋ก ๋ด๋ ค์ค active๋ผ๋ ๊ฐ์ด true or false๋ก ๋ฐ๋๊ฒ ๋ฉ๋๋ค.
styled-component๋ ๋ด๋ถ์ ์ผ๋ก props์ ๋ฐ์ ์ ์๊ณ , ๊ทธ props์ ๋ฐ๋ผ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
#์คํ์ผ
const ์ปดํฌ๋ํธ๋ช
= styled.์คํ์ผ์ปดํฌ๋ํธ๋ช
์คํ์ผ ๋ฃ๊ธฐ...๋ฌธ๋ฒ์ผ๋ก ๋ง๋ค์ด์ง๋๋ค.
๊ธฐ์กด์ ์๋ ์คํ์ผ์ปดํฌ๋ํธ๋ฅผ ์์๋ฐ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
const flexCenter = css`
display: flex;
justify-content: center;
align-items: center;
`;
const FlexBox = div`
${flexCenter}
`;
// Login.jsx
export const LoginContainer = styled.div`
background: red;
`;
// Other.jsx
import { LoginContainer } from ".Login";
const Other = () => {
return <LoginContainer>...</LoginContainer>;
};
import React from "react";
import styled, { css } from "styled-components";
const sizes = {
desktop: 1024,
tablet: 768
};
// sizes ๊ฐ์ฒด์ ๋ฐ๋ผ ์๋์ผ๋ก media ์ฟผ๋ฆฌ ํจ์๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
const media = Object.keys(sizes).reduce((acc, label) => {
acc[label] = (...args) => css`
@media (max-width: ${sizes[label] / 16}em) {
${css(...args)};
}
`;
return acc;
}, {});
const Box = styled.div`
/* props ๋ก ๋ฃ์ด์ค ๊ฐ์ ์ง์ ์ ๋ฌํด์ค ์ ์์ต๋๋ค. */
background: ${props => props.color || "blue"};
padding: 1rem;
display: flex;
width: 1024px;
margin: 0 auto;
${media.desktop`width: 768px;`}
${media.tablet`width: 768px;`};
`;
import styled, { createGlobalStyle } from "styled-components";
export const GlobalStyle = createGlobalStyle`
body{padding:0; margin:0}
`;