๋ฆฌ์กํธ ์ต์์ ์ปดํฌ๋ํธ App์ ํ์ ์ปดํฌ๋ํธ๋ค์ ์ฌ๋ฌ ๊ฐ ๋ด๊ณ ์๋ค๋ณด๋ฉด, App.css์ ์ ์ฉ๋ ์คํ์ผ๋ค์ด ํ์ ์ปดํฌ๋ํธ์๋ ์ ์ฉ๋์ด ์คํ์ผ์ด ์ค์ผ๋ ์ ์๋ค. ์ด๋ฅผ ๋ฐฉ์ง๋ฅผ ์ํด ์ ์ฒด ์ปดํฌ๋ํธ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํ css, ํน์ ์ปดํฌ๋ํธ์๋ง ์ ์ฉํ๊ธฐ ์ํ css๋ฅผ ๋ณ๋๋ก ์์ฑํ ํ์๊ฐ ์๋ค. ์ค๋์ ๊ฐ ์ปดํฌ๋ํธ๋ณ๋ก css ๊ด๋ฆฌํด์ฃผ๊ธฐ ์ํด sass/css module/styled components๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ ์์๋ณด์.
ํด๋๊น์ด๊ฐ ๋ณต์กํด์ง ๊ฒ ๊ฐ์ vite.config.js์์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด์คฌ๋ค.
export default defineConfig({
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
},
},
})
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ ํ์ผ๋ค
src/styles/button.scss
src/components/index.js
src/components/Button.jsx
App.jsx
function Button({ size, color }) {
return (
<div>
<button
className={`button
${size} ${color}
`}
>
๋ฒํผ์
๋๋ค
</button>
</div>
)
}
export default Button
์ด๋ฒ์ ๋ฐฐ์ด ๊ฒ ์ค ์ฌ๋ฐ์๋ ๊ฑด, index.js ์๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ ๋ค๋ฅธ ํด๋์์ index.js๋ฅผ import ํด์ฌ ๋ ๊ตณ์ด ์ด๊ฒ์ ์ด๋ฆ์ ์ฝ ์ง์ด ๋ช
์ํด์ค์ง ์์๋ ์ด ๋
์๋ถํฐ ์ฐพ์์จ๋ค๋ ํน์ฑ์ด ์์ด์ import ํ ๋ ์ฝ๋๊ฐ ์ข ๋ ๊ฐ๊ฒฐํด์ง๋ค.
์๋ฅผ ๋ค์ด,components/index.js ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๊ณ ,
```jsx
import Button from './Button'
export { Button }
๊ทธ๋ผ ์ด์ App.jsx ์์ Button.jsx๋ฅผ ๊ฐ์ ธ์ฌ ๋๋
import { Button } from '@/components'
์ด๋ ๊ฒ๋ง ์ ์ด์ฃผ๋ฉด ๋๋๋ ๊ฒ์ด๋ค.
@/components/Button.jsx
๊น์ง ์ ์ ๊ฒ ์๋๋ผ /components
๊น์ง๋ง ์จ๋ index.js๋ฅผ ๋ฐ๋ก ์ฐพ์๋ฒ๋ฆฌ๋ ํน์ฑ์(๋๊ตฌ์ ํน์ฑ์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ง, ์๋ฌดํผ index ์ด๋ฆ๋ถํฐ ์ฐพ๋๋ค๊ณ ํ๋ค. ๊ทธ๋์ ํ์ผ ์ด๋ฆ์ ์ผ๋ถ๋ฌ index๋ผ๊ณ ์ง๋๊ฑฐ๋ผ๊ณ ...!) ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ก๋ค.
App.css ํ์ผ์ ๋ง๋ค์ด์ App.js์์ importํด์ ์ด๋ค๊ณ ํด๋ App.css์ ์ ์ ํด๋์ค๋ช
๋ค์ ๋ค๋ฅธ .js ์๊น์ง ์ ์ฉ๋ ์ ์๋ค.(์ค์ผ)
๊ทธ๋ด ๋ ๊ทธ๋ฅ CSS ํ์ผ์์๋ ๋ค๋ฅธ JS ํ์ผ์ ๊ฐ์ญํ์ง ์๋ ๋ชจ๋ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ ์ปดํฌ๋ํธ๋ช
.module.css
์ด๋ ๊ฒ css ํ์ผ์ ์์ฑํ๋ฉด ๋๋ค!(scss ์๋จ)
๊ทธ๋ฌ๋ฉด ๊ทธ ์คํ์ผ๋ค์ ์ค๋ก์ง ๊ทธ ์ปดํฌ๋ํธ์๋ง ์ ์ฉ์ด ๋๋ค.
๋ํ, ํด๋์ค๋ช
๋ง๋ค ๊ณ ์ ๊ฐ์ ๋ถ์ฌํด์ ํด๋์ค๊ฐ ์ค๋ณต๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
์ฌ์ฉํ ํ์ผ:
src/styles/module.css
src/components/Button.jsx
import style from '../styles/button.module.css'
function Button() {
return (
<div>
<button
className={`${style.button}
${style.large} ${style.secondary}
`}
>
๋ฒํผ์
๋๋ค
</button>
</div>
)
}
export default Button
์คํ์ผ์ด ์ ์ฉ๋ ์ปดํฌ๋ํธ
๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๋ชจ๋!
์ปดํฌ๋ํธ๋ณ๋ก ์คํ์ผ์ ์ ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด์ stylesํด๋๊ฐ ์๋๋ผ ์ปดํฌ๋ํธ๋ณ ํด๋๋ฅผ ์์ฑํ๋๋ก ํ๊ฒ ๋ค.
์ฌ์ฉํ ํ์ผ:
src/components/Button/index.jsx
src/components/Button/style.js
yarn add styled-components
๋ก ์ค์นํด์ฃผ๊ณ , ์คํ์ผ์ ์์ฑํ ๋ฐฑํฑ ์์ชฝ์ ์๋์์ฑ์ด ์ ๋๊ธฐ ๋๋ฌธ์ ํธ์์ vscode-styled-components
ํ์ฅ ํ๋ก๊ทธ๋จ๋ ์ค์นํ๋ค.
style.js ๋ด์ฉ
import styled from 'styled-components'
//์๋ ํ๊ทธ๋ช
์ div๋ button ๊ฐ์ html ํ๊ทธ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
const (๋ณ์๋ช
) = styled.(ํ๊ทธ๋ช
)`
index.jsx ๋ด์ฉ
import * as S from './style'
// style.js์์ ์์ฑํ ์คํ์ผ ๋ด๋ถ ๋ณ์๋ค์ `S`๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ป
function Button(){
return (
<S.Button>
<p>๋ฒํผ</p>
</S.Button>
// S.Button ์ด๋ผ๊ณ ํจ์ผ๋ก์จ,
// ์ผ๋ฐ ์ปดํฌ๋ํธ๊ฐ ์๋ ์คํ์ผ์ด ์ ์ฉ๋ Button ์ด๋ผ๋ ๊ฑธ ์๊ฒ ํด์ค
)
}
์คํ์ผ๋ ์ปดํฌ๋ํธ๋ props๋ฅผ ๋ฐ์ ์ ์๋ค๋ ํน์ง์ด ์๋ค.