์ฐ๋ฆฌ๊ฐ ํ์ ์์ ํ ๋ ํ๊ทธ์ ํด๋์ค๋ช ์ ์ ํด์ css๋ฅผ ์ ํ ๋ ์ ๋ง ์์ฃผ ์ฐ๋ ๋จ์ด๋ค์ด ์ค๋ณต๋์ด ์คํ์ผ์์ ์ ๊ณค๋ํ ๋๊ฐ ์ข ์ข ์๋ค. ์ด๊ฑธ ๊ณ ์ ์ ๊ฐ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก css-modules์ด๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ css ํ์ผ์์ ํด๋์ค๋ช ์ด ์ถฉ๋ํ ์ ์๋ ๋จ์ ์ ๊ทน๋ณต ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ css-modules์ ๊ฐ๊ฒฐํ ํด๋์ค๋ช ์ ์ด์ฉํด ์ปดํฌ๋ํธ ๋จ์๋ก ์คํ์ผ์ ์ ์ฉํ ๋๋ ์ข๋ค.
{์ด๋ฆ}.module.css
CRA์์๋ CSSํ์ผ ์ด๋ฆ์ ์์ ๊ฐ์ด ์์ฑํ๋ฉด css-module์ด ๋๋ค.
import style from './button.module.css';
<button className={`${style.button} ${style.big}`}>ํฐ ๋ฒํผ</button>
<button className={`${style.button} ${style.small}`}>์์ ๋ฒํผ</button>
css-module์ ํด๋์ค๋ช ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋ธ๋ค. css ํ์ผ์์ ์ ์ํ ํด๋์ค๋ช ์ด style๊ฐ์ฒด์ ์์ฑ ์ด๋ฆ์ผ๋ก ์กด์ฌํ๋ค. style๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
{
big:'button_big__1AXxh',
small:'button_small__1G4lx'
}
๋ชจ๋๋ก ํด๋์ค๋ช ์ ์ ์ํจ์ผ๋ก์ ์ด๋ ๊ฒ ํด๋์ค๋ช ๋ค์ ํด์๊ฐ์ด ์๋์ผ๋ก ๋ค์ด๊ฐ๊ฒ๋๋ค. ๊ทธ๋์ ๋ค๋ฅธ cssํ์ผ์์ ๊ฐ์ ์ด๋ฆ์ ํด๋์ค๋ช ์ ์ฌ์ฉํ๋๋ผ๋ ์ด๋ฆ ์ถฉ๋์ ๋ฐ์ํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ className์ ์์ฑ๊ฐ์ ์ ๋ ฅํ๋ ์ฝ๋๊ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ง ์๋๋ค๊ณ ์๊ฐ์ด ๋๋ค๋ฉด, classnames ํจํค์ง๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๋๋ฅผ ๊ฐ์ ์ํฌ ์ ์๋ค.
$npm install classnames
import style from './box2.module.css';
import cn from 'classnames';
function Box({size}) {
const isBig = size === 'big';
const label = isBig ? 'ํฐ ๋ฐ์ค' : '์์ ๋ฐ์ค';
return (
<div
className={cn(style.box, { [style.big]: isBig, [style.small]: !isBig})}
>
{label}
</div>
);
}
export default Box;
์ด๋ ๊ฒ cnํจ์์ ์ธ์๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด๋ถ๋ก ํด๋์ค๋ช
์ ์
๋ ฅํ ์ ์๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ด๊ฒ ๋ ์ด๋ ค์๋ณด์ด๋๋ฐ ์ง์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํด๋ณด๋ฉด ์ด๊ฒ ๋ ์ฌ์ธ ์๋...? ์์๋๊ฐ ๐