@ callemall / material-ui ํ ์์์ ๋ ์ฌ๊ธฐ์ ์ ๋ ฅ์ ๋จ๊ฒจ์ฃผ์ธ์ ๐
์ค๋ ์ง์๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ 0.16.0
์ ์คํ์ผ๋ง ์๋ฃจ์
์ ๊ฒฐ์ ํด์ผํฉ๋๋ค. ์ฑ๋ฅ ๋ฌธ์ ์ธ์๋ ์ธ๋ผ์ธ ์คํ์ผ๊ณผ ํจ๊ป ์ฌ์ฉํ ์์๋ CSS์ ์ผ๋ถ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ธ ์ ์ฌ ํด๋์ค, ๋ฏธ๋์ด ์ฟผ๋ฆฌ (๋งค์น ๋ฏธ๋์ด์์ด)๋ฅผ ๋์น๊ณ ์๋ค๋ ์ฌ์ค์ ๋ณด์ ํ ์์๋ ํดํน๊ณผ ์ํ์ด ์ฌ๋ฐฉ์ ์์ต๋๋ค. ) ๋ฑ
๋ด๊ฐ ์ดํด ํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ์ผ๋ฐ์ ์ธ ํฉ์๋ DOM์ ์ค์ ์คํ์ผ ์ํธ์ ์คํ์ผ์ ์์ฑํ ์์๋ ๊ธฐ๋ฅ์ ๊ฐ์ง JS ์คํ์ผ ์๋ฃจ์ ์ ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์์์ด๋ฅผ ์ํํ๋ ๋ช ๊ฐ์ง ์ ์ง ๊ด๋ฆฌ ์๋ฃจ์
์
๋๋ค.
https://github.com/rofrischmann/react-look
https://github.com/Khan/aphrodite
https://github.com/jsstyles/react-jss
๋ค์์ ์๋ก์ด ์๋ฃจ์ (IMO)์ ๊ตฌํํ ๋ ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ฌํญ์ ๋๋ค.
react-look
๋งํผ ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ต์ ๋น๋ ํฌ๊ธฐ๋ก ๋ชจ๋์ ๊ฐ์ ธ์ฌ ์์๋ ๋ฐฉ๋ฒ์ ํ์ธํ์ญ์์ค.์ถ๊ฐ ์ง๋ฌธ :
6) xxxxStyle
์ํ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ณ ์ฌ์ฉ์๊ฐ ์คํ์ผ ์ฌ์ ์๋ฅผ ์ํด xxxClassName
๋ฅผ ์ ๋ฌํ๋๋ก ํ ์์ ์
๋๊น? ์๋๋ฉด ์ด๊ฒ๋ค์ด ๋ฌด๋ฃ์
๋๊น?
7) CSS๋ฅผ ํตํ ์คํ์ผ ์ฌ์ ์๋ฅผ ํ์ฉํ๊ณ ๊ตฌ์ฑ ์์ ์ธํฐํ์ด์ค๋ฅผ ๋จ์ํํฉ๋๋ค. ๋ฐ๋ผ์ IconMenu์์ menuItemStyle
๋ฅผ ์ฌ์ ์ํ๋ ค๋ฉด style = StyleSheet.create({ IconMenu: {MenuItem: { color:red }})
์ ํ ์ฌ์ ์๋ฅผ ๋ง๋ค์ด์ผํฉ๋๊น?
@chrismcv ์ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ ์ฐ๋ฆฌ๊ฐ ์ ์ํ ์ด๋ฌํ ์ํผ ํน์ ์ํ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์๋ฃจ์ ์ ํ์คํ ํ์ฉํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. [TextField] add floatingLabelFocusStyle prop # 4043
์ฐ๋ฆฌ๊ฐ ์๊ธฐ ์ ์, ์ฌ๋๋ค์ ๊ฐ๋ฅํ ๋ชจ๋ ํฌ์ปค์ค / ์กํฐ๋ธ / ํธ๋ฒ / ๋ฌด์์ด๋ ์ํ์ ๋ํ ํ์ ๊ตฌ์ฑ ์์ ์คํ์ผ์ ๋ํ ์ํ์ ์์ฒญํ ๊ฒ์ ๋๋ค.
"XXXX ์คํ์ผ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ", "YYYY ๋ด์์ XXX ์คํ์ผ์ ์ง์ ํ ์ ์์", "XXX์ somethingInsideToTheLeftButSlightlyMiddleFocusHoverActiveStyle
์ํ์ ์ถ๊ฐํ์ญ์์ค"์ ๊ฐ์ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@chrismcv in 6.๋ณด๋ค ์ผ๋ฐ์ ์ธ xxxxStyle
props ๋ classNames์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ์ผ๋ถ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ ์ผ๋ก๋ ๋๋ฌ ํ ์ ์์ด์ผํฉ๋๋ค (๋คํํ๋ :hover
๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค!).
@chrismcv xxxxStyle
props๋ className
-ified ์คํ์ผ ๊ฐ์ฒด๊ฐ ์๋ style
์์ฑ์ ์์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@nathanmarks ๋ํ๋ฅผ
์ฑ๋ฅ ๋ฌธ์ ์ธ๋ถ
์ ์๊ฒ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ ํํ ์๋ฃจ์
์ ๋ํ ์ฃผ์ ๊ด์ฌ์ฌ ์ค ํ๋์
๋๋ค.
ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ง์ CPU ์ฌ์ดํด์ ์์๋ค ๊ณ ์ฝ๊ฒ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฒค์น ๋งํฌ๊ฐ ๋ง์ง ์์ต๋๋ค. CPU ์ฌ์ดํด์ ์ธ๋ผ์ธ ์คํ์ผ ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ๊ฐ๋น์ง ์์ง์ผ๋ก ์์ค๋ฉ๋๋ค.
์๋ ํ์ธ์.
๋๋ ํ์ฌ ๋ช ๊ฐ์ง JS ์คํ์ผ ์๋ฃจ์ ์ ๊ฐ์ง๊ณ ๋๊ณ ์์ต๋๋ค. ํฅ๋ฏธ๋กญ์ง ๋ง ๋งํ์๋ฉด ์ฌ์ ํ "์ด๊ธฐ"๋ผ๋ ๊ฒ์ด ๋ถ๋ช ํฉ๋๋ค.
๋ด๊ฐ ์๊ฐํ ํ ๊ฐ์ง๋ ๋์ ์คํ์ผ ์์ฑ ์ธ๋ถ (์ : ๊ตฌ์ฑ ์์์ color
์ํ์ด์๋ ๊ฒฝ์ฐ)์์ ๊ธฐ๋ณธ ์คํ์ผ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ์์ ๋ณ๊ฒฝํด์ผ ํ๋๊ฐ?
JS ์คํ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ต๋ ์ฑ๋ฅ์ ์ป์ผ๋ ค๋ฉด StyleSheet.create()
๋ฉ์๋๋ฅผ ํ ๋ฒ ์ฌ์ฉํ๊ณ open={true}
์ ๊ฐ์ props / states์ ๋ํด ํด๋น ๊ฐ์ฒด์ ํค (css "classes")๊ฐ ์์ด์ผํฉ๋๋ค. ๋ ๊ฐ์ ์กฐ๊ฑด๋ถ ์์ฑ์ ์ฌ์ฉํ์ฌ ์คํ์ผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋์ ์ผ๋ก ๋น๋ํ๊ณ ๋ชจ๋ ๋จ์ผ ์คํ์ผ์ ๋ํด ๋ ๋๋ง ํ ๋๋ง๋ค ์คํ์ผ ์ํธ ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ ๋ฌํ๋ ๋์ .
์คํ์ผ ์ํธ ์ ํ๊ธฐ๊ฐ DOM์ ํ ๋ฒ๋ง ๊ธฐ๋ก๋๋ค๋ ์๋ฏธ๋ก ์บ์๋์ง๋ง (์ผ๋ถ libs์์๋ render()
ํ์ํ ๋๋ง DOM์ ๊ธฐ๋ก๋จ) ์ฌ์ ํ ์ผ๋ถ ๊ณ์ฐ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ๊ณ ์์ต๋๋ค. + ๊ฐ์ฒด ์์ฑ + ์์์ ์ธ๊ธ ํ ๊ฐ๋น์ง ์ฝ๋ ์
. ์ฐ๋ฆฌ๊ฐ ๋ฒ๋ฆด ๋๋ง๋ค ๋ ๋๋ง ํ ๋๋ง๋ค ์๋ก์ด ์คํ์ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ.
์ ... ์ด์ (์ผ์์ผ) ์ฌ๊ธฐ์ ๋๊ธ์ ๋จ๊ฒผ์ต๋๋ค. ์ญ์ ๋์์ต๋๊น?
@rvbyron ๋ถ๋ช ํ ๊ธฐ์ตํฉ๋๋ค. ๋๋ ํ์คํ ๊ทธ๊ฒ์ ์ญ์ ํ์ง ์์๋ค.
@rvbyron ๋๋ ๊ทธ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค. ๋๋ ๋ฌด์จ ์ผ์ด ์ผ์ด ๋ฌ๋์ง ์ ํ ๋ชจ๋ฅธ๋ค.
@rvbyron- ๋ด ์ด๋ฉ์ผ์ ํฌํจ๋์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ์ธ์ฉ ๋ ํ์์ผ๋ก ๋์ ์ค์ธ์!
๊ธ์์, ์ ๋ ๋ง์ ์ผ์ด ์ผ์ด๋๋ ๊ฒ์๋ณด๊ณ ์ถ์ต๋๋ค.
A) ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค์์ ์์์ ์คํ์ผ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๋ชจ๋ ๊ตฌ์ฑ ์์๋ className์ ์ฌ์ฉํ์ฌ ์ ์ํด์ผํฉ๋๋ค. ๊ตฌ์ฑ ์์๊ฐ ์คํ์ผ์ ์ฌ์ฉํ๋ฉด CSS๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด ํ๊ดด๋ฉ๋๋ค.
B) classNames๋ฅผ ๊ฐ ๊ตฌ์ฑ ์์์ ๋ฃจํธ ์์์ ์๋์ผ๋ก ์ฒจ๋ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค (์ : RaisedButton ๊ตฌ์ฑ ์์๋ ๊ตฌ์ฑ ์์์ ๋ฃจํธ ์์์ ์์ ์ ์ผ๋ก className = "mui-raised-button"์ด ์์). ์คํ์ผ๋ง์ด ํจ์ฌ ์ฌ์์ง๋๋ค. ๊ตฌ์ฑ ํ ์๋ ์์ต๋๋ค.
C) muiTheme.js ํ์ผ์์ ํ ๋ง๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ต๋๋ค. ํ ๋ง ์ง์ muiTheme.SCSS ํ์ผ์ ๊ตฌ์ฑ ์์์์ ํน๋ณํ ํ์ฉํ๋ ์์ฑ๋ฟ๋ง ์๋๋ผ ํ ๋ง ์์ฑ์๊ฐ ์ ํํ ์์ฑ์ ์ ์ฉ ํ ์ ์๋ค๋ ์ ์์ ํจ์ฌ ๋ ์ข์ต๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ์๋ง๋ B๊ฐ ๊ตฌํ๋๊ณ ํ์ฑํ๋์ด์ผ ํ ๊ฒ์ ๋๋ค.
D) React-look์ ์คํ์ผ ์์ฑ์ ํฌํจํ๋ JSON ๊ฐ์ฒด๋ฅผ classNames๋ก ๋ณํํ๋ฏ๋ก ์ข์ ์ ์ถฉ์์ผ๋ก ๋ณด์ ๋๋ค. ์ฌ์ ์ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ C์์ ๋งํ๋ฏ์ด SCSS์์ ํ ๋ง ๊ธฐ๋ฐ์ ์์ฑํ๊ณ ์ถ์ต๋๋ค. ์ฌ์ฉํ CSS ์ง์ ํจํค์ง์ ๋ํด ๊ฝค ์ด๋ ค ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ className ๋งค๊ฐ ๋ณ์๋ณด๋ค ์์์ ์คํ์ผ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ํ๋ ๋ชจ๋ ๊ฒ์ ๋ฉ๋ฆฌ ํ ๊ฒ์ ๋๋ค.
@chrismcv ๊ฐ์ฌํฉ๋๋ค ์น๊ตฌ!
์ ๋ @rvbyron ์ด ๋งํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ค๋ฉด์์ JS ์คํ์ผ๋ง์ ์ผ๋ฐ CSS์์ ํจ๋ฌ๋ค์์ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ผ์ ์ ๋ฌด์์ JS ์คํ์ผ๋ง์ ์ฌ์ฉ ํ์ง ์์ผ๋ฉฐ ๋ค๋ฅธ ์ฌ๊ณ ๋ฐฉ์์ด ํ์ํ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก JS์ ๋ฅ์ํ์ง ์์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ ์์๋ ๋์์ด๋๋ฅผ ๋ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
์ฌ๊ธฐ์์ ๋ชจ๋ ๊ฐ๋๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํธ์ ๋ด์ ๊ฐ๊ธฐ
react-look
์ ๋ํด ๋ด๊ฐ ๊นจ๋ฌ์ ํ ๊ฐ์ง๋ look
HoC์ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ํํด์ผํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๊ฝค ์นจ๋ต์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ render()
ํจ์๋ฅผ ๊ฐ๋ก ์ฑ๊ณ super.render()
๋ฅผ const
ํ๊ณ ๊ทธ๋ฐ ๋ฐฉ์์ผ๋ก ์คํ์ผ ํ์ธ ์์
์ ์ํํฉ๋๋ค. Khan / aphrodite ์ ๊ฐ์ ์ผ๋ถ ๋ค๋ฅธ ์๋ฃจ์
์ Stylesheet.create()
๋ด๋ถ className={}
Stylesheet.create()
์ styles.xxxx
์ฐธ์กฐ ์ฃผ์์ ํจ์ ๋ํผ๊ฐ ํ์ํฉ๋๋ค.
CSS๋ฅผ ์ํด render()
ํจ์๋ฅผ ํ์ด์ฌํนํ๋ ๊ฒ์ ๋์๊ฒ ๊ณผ๋ํ๊ฒ ์ค๊ณ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ๊น์ด ํตํฉ ๋ ์คํ์ผ ๊ธฐ๋ฅ์์ํ ๋๊ตฌ / ์ง์์ ๋ด์ฅ ๋ React๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ ๋๋ง์ ์ ์ดํ๋ โโCSS ๋์ฐ๋ฏธ HoC์ ๋ํ ์์ด๋์ด๊ฐ ํ์คํ์ง ์์ต๋๋ค.
์๊ฐ?
์๋ ํ์ธ์ Material-UI ํ!
ํ๋์ ๋น์ ์ ๋ฐ๋ผ ์๊ณ ,์ด ์ฃผ์ ๋ฅผ๋ณด๊ณ , ์ธ๋ผ์ธ ์คํ์ผ์์ CSS๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ด ๋ ์์๋ ์ด์ ์ ๋ํด ๋ช ๊ฐ์ง ์๊ฐ์ ํจ๊ปํ๊ณ ์ถ์์ต๋๋ค. ์ด ์ ์ฅ์์์ ๋ ๋๋ง ์ฑ๋ฅ, ์์ / ์ค์ฒฉ ์์ ์คํ์ผ ์ง์ , ๋ฏธ๋์ด ์ฟผ๋ฆฌ, ์์ฌ ์์ ๋ฑ์ ๋ค๋ฃจ๋ ๋ง์ ํ ๋ก ์ ์ฝ์์ผ๋ฏ๋ก ์์ง ๋ ผ์ํ์ง ์์ ๋ค๋ฅธ ํญ๋ชฉ์ ์ง์คํ๊ฒ ์ต๋๋ค. ํ์ง๋ง ๊ทธ๊ฒ๋ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ์ผ ๊ตฌ์ฑ์ ๋๋ค. ์ ๊ฐ ์๋ฏธํ๋ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
size={40}
๋ ๋๋น, ๋์ด ๋ฐ ์ค ๋์ด๋ฅผ 40px
).์คํ์ผ์ ์กฐ์ ํ ๋ ์ดํด๋ณผ ์์น๊ฐ 4 ๊ฐ ์ด์ (๐)์ด๋ฏ๋ก ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์คํ์ผ์ด CSS์ ํจ๊ป ์ ๊ณต๋๋ฉด ์ ํ๊ธฐ๊ฐ ํ์๋๊ณ ์์ ํด์ผ ํ ์์น๋ฅผ ์ ํํ ์ ์ ์์ต๋๋ค. ์ธ๋ผ์ธ ์คํ์ผ์ ์ฌ์ฉํ๋ฉด ํน์ ์์ฑ์ ์ถ์ฒ์ ์์ ํด์ผ ํ ํญ๋ชฉ์ ์ดํดํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์๊ฐ ์๋ชป๋ ์์น์์ ์์ ํ๋ฉด ( size
๋งค๊ฐ ๋ณ์ ๋์ styles
์์ญ์์ size
๊ฐ ์คํ์ผ์ด๋ผ๋ ๊ฒ์ ์ค์ ๋ก ์๋ ค์ฃผ๋ ๊ฒ์ด ์์ผ๋ฏ๋ก) ์ ์ฒด width=height=line-height=40px
๋ธ๋ก ์ฑ๋ฅ, ๋๋ width/height/line-height
๋ค์ ์์ฑํ์ฌ size
๋งค๊ฐ ๋ณ์๋ฅผ ์ ์ฉ ํ ์ ์๊ฒ๋ฉ๋๋ค.
๋ํ ์ธ์คํํฐ์์ ๋ณผ ์์๋ ๋ชจ๋ ๊ฒ์ด element.style
์ด๋ฏ๋ก ํน์ ์์ฑ์ด ์ ์ฉ๋ ๋ถ๋ชจ ์์๋ฅผ ์กฐ์ฌํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์คํ์ผ์ด ์ ํ์ (ํด๋์ค ์ด๋ฆ)์ ํจ๊ป ์ ๊ณต๋๋ฉด ์ธ๋ผ์ธ ์คํ์ผ๋ณด๋ค ์คํ์ผ ๊ตฌ์กฐ๋ฅผ ํจ์ฌ ๋ ๋ง์ด ์ ์ด ํ ์ ์์ต๋๋ค.
์ ๋ฐ์ดํธ : ์ ์ (์ด ์ฃผ์ ์ ๊ดํ)์ ์ธ๊ธํ๋ ๊ฒ์ ์์์ต๋๋ค.
/component
--component.js
--component.css (or sass that is converted to css when the page is rendering)
์ด ๊ตฌ์กฐ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ฒ์์ ์ ์งํ์ง๋ง ์คํ์ผ์ ๋ ๋ง์ด ์ ์ด ํ ์ ์์ต๋๋ค. BEM className ๊ท์น์ ๋ถํ์ํ ์ค์ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค.
.mui-component {}
.mui-component__child {}
์ ๋ฐ์ ์ผ๋ก Material-UI ์คํ์ผ์ ๊ตฌํ, ์กฐ์ ๋ฐ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ฟก๋ฟก
์ด๋ฉ์ผ์ ์ฐพ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๊ทํ์ ์๊ตฌ์ ๊ฐ์ฅ ์ ํฉํ ์คํ์ผ๋ง ๊ธฐ๋ฒ์ ๊ฐ์ ธ ์ค๋ "๋์"๊ฐ๋ ์ ์ด๋ป์ต๋๊น? "StyleTheme"๋๋ "ClassTheme"๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ์ ํํ ์ ์์ต๋๋ค. StyleTheme๋ ์ค๋๋ ์ muiTheme ๊ฐ์ฒด material-ui๋ฅผ ์ฐธ์กฐ ํ ์ ์์ผ๋ฉฐ ๊ตฌ์ฑ ์์ ์ค์ฌ์ ์คํ์ผ๋ง ๊ฐ๋ฐ์๋ฅผ ํ๋ณตํ๊ฒ ๋ง๋ญ๋๋ค. ๋๋ muiTheme.js ๊ฐ์ฒด (๋๊ธฐํ)์์ ๋น๋ ๋ SCSS ํ์ผ์ ์ฌ์ฉํ๋ ClassTheme๋ CSS ์ค์ฌ ๊ฐ๋ฐ์๋ฅผ ๋ง์กฑ์ํต๋๋ค. ์ด๋ ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง ์์์์ {... theme.ComponentName}์ ์์ฉํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
๋งค์ฐ ๊ฐ๋จํ ์์ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด RoundButton ๊ตฌ์ฑ ์์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ ๋๋ง ๋ฉ์๋๊ฐ ์์ต๋๋ค.
render() {
return (<button {...theme.RoundButton} />);
}
StyleTheme ๋นํค์ด๋น์ด์ ๊ฒฝ์ฐ theme.RoundButton์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
{
style: {
display: 'inline-block';
borderRadius: '20px';
width: '40px';
height: '40px';
}
}
ClassTheme ๋นํค์ด๋น์ด์ ๊ฒฝ์ฐ theme.RoundButton์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
{
className: 'mui-round-button'
}
์ด ๋์ ์กฐํฉ์ ClassStyleTheme ๋์์ผ๋ก ๊ฒ์ ํ ์ ์์ผ๋ฉฐ theme.RoundButton์ ๋ค์์ ๋ชจ๋ ํฌํจํฉ๋๋ค.
{
className: 'mui-round-button',
style: {
display: 'inline-block';
borderRadius: '20px';
width: '40px';
height: '40px';
}
}
mui-theme.scss ํ์ผ์ muiTheme.js ํ์ผ์์ ์์ฑ๋๋ฉฐ JS ํ์ผ์ ํฌํจ ๋ ์ ํํ ์์ฑ์ SCSS์ ๋ฐ์ํฉ๋๋ค. JS ์ด๋ฆ์ ๋ํ ์ผ์ด์ค๋ ๋ ๋ง์ ํ์ค ํด๋์ค ์ด๋ฆ์ผ๋ก ๋ณํ๋ฉ๋๋ค.
mui-round-button {
display: inline-block;
border-radius: 20px;
width: 40px;
height: 40px;
}
MUI ๊ตฌ์ฑ ์์์ ๋ํ ๋ชจ๋ CSS ์ฌ์ฉ์ ์ ์๋ mui-theme.scss ํ์ผ์ด๋ก๋ ๋ ํ๋ก๋ ๋ ๋์ผํ ํด๋์ค์ด๋ฏ๋ก mui-theme ์์ฑ์ ์ฌ์ ์ํฉ๋๋ค.
์๋ ํ์ธ์.
scss
(๋ค์ ์คํ์ด์ค / ํด์ฑ์์ํ + CSS ๋ชจ๋)๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ฉด ๋ง์ ์ด์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ๋น์ ์ด 100 % ๋ฐ๋ํ๋ ๊ฒ์
๋๊น? ์ง์ฅ์์ ์ต์ํด ์ก๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ํธ๊ฒฌ์ด์์ ์ ์์ง๋ง, ๋ง์ ์ฌ๋๋ค์ด ๊ฐ์ ๋ฐฐ๋ฅผ ํ๊ณ ์์ต๋๋ค.
JS ์คํ์ผ๋ง ์ํฉ์ ์ฃผ์ ๋ฌธ์ ๋ ๋ชจ๋ ์๋ฃจ์ ์ด ์์ง ์งํ์ค์ธ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ค๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ดํด๋ณผ ์ค์ ์ฑ๋ฅ ํ๊ฐ๊ฐ ๋ง์ง ์๊ณ , ์ฐ๋ฆฌ๊ฐ๋ณด๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฒ์ฆ๋์ง ์์์ผ๋ฉฐ, JS์์ ์คํ์ผ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ด๋ ค๊ณ ๋ง์ ์๊ฐ์ ๋ณด๋ด๋ ๊ฒ์ฒ๋ผ ๋๋๋๋ค. ์ด lib์ ์ฃผ์ ๋ชฉํ๋ ๋จธํฐ๋ฆฌ์ผ ๋์์ธ ์ฌ์์ ๊ตฌํํ๋ ๊ฒ์ด๋ฉฐ, ์ด๊ฒ์ด ํ์ฌ ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญ ํ๊ณ ์๋ค๊ณ ๋๋๋๋ค. (์ฑ๋ฅ ์ํฅ ๋ฌธ์ ๋ฅผ ์ ๋ ฌํด์ผ ํจ)
๋๋ ์ด๊ฒ์ ๋ํด ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ฐ๋ ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ๋ชจ๋ ๊ฒ์ด ์ข์ ๋ณด์ด๋ฉฐ ์ฝ๋ ์ธ๋ถ์์๋ ์ฌ๋์ ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ์ํฉ์ด ๋ค๋ฅด๋ฉฐ ์์ ๋ชจ๋ ๋ฌธ์ ์ ๋ค์ ์ฌํญ์ด ์์ต๋๋ค.
์ง๊ธ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์์ฃผ์ ์ฌํญ์ผ๋ก ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๋ ์ฒ๋ฆฌํฉ๋๋ค.
somethingInsideToTheLeftButSlightlyMiddleFocusHoverActiveStyle
์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ์์ ์ ๋ค์ ์ํํด์ผํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ์์ํ๊ธฐ ์ ์ ๋ชจ๋ ์ง๋ฌธ์ ๋ตํด์ผํฉ๋๋ค.
์ ์ ๊ฒธ์ํ ์๊ฒฌ์ผ๋ก๋ CSS์ CSS๋ฅผ ์ปดํ์ผํ๋ ๊ฒ์ด ๋ฏธ๋์ ์ผ๋ถ๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ธ๋ผ์ธ ์คํ์ผ์ด ์ฐ๋ฆฌ ์ถ์ ํจ์ฌ ๋ ์ฝ๊ฒ ๋ง๋ค์๋ค๋ ๋ฐ ๋ชจ๋ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์งํ ์ธ๋ผ์ธ ์คํ์ผ์์ ๋ณผ ์ ์๋ ์ ์ผํ ์ ํ ์ :hover
!
์ฐ๋ฆฌ๋ ์ฝ๊ฐ์ ๋์์ธ์ ํตํด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
ListItem
๊ฐ์ง๊ณ ์์ต๋๊น? ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ถํดํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด somethingInsideToTheLeftButSlightlyMiddleFocusHoverActiveStyle
์ ๊ฐ์ ๊ดด๋ฌผ์ ์ถ๊ฐ ํ ํ์๊ฐ ์์ต๋๋ค.:hover
๋ธ๋ผ์ฐ์ ๋ ๋ฐ์์ด ๋ญ๊ฐ๋ฅผ ํ ๋๊น์ง ์ฐ๋ฆฌ๊ฐ ์ด ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.์ ์์ ์ ํ์ฌ์ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ด๋ฏธ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์๋ค๋ ๊ฒ์
๋๋ค. ์ธ๋ผ์ธ ์คํ์ผ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ํจํด์ ๋ฐ๋ฅด์ง ์๊ธฐ ๋๋ฌธ์ ํ๊ณ๊ฐ ์์ต๋๋ค. ๊ตฌ์ฑ ์์๋ฅผ ๋ถํดํ๊ธฐ ์์ํ์ฌ ํจ์ฌ ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๋ฉด ์๋ฌด๊ฒ๋ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. take MeuItem
๊ทธ๊ฒ์ ๊บผ๋ด์ ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์์ต๋๋ค. ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ์์ํ ๋ ๋๋ง์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์์๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค!
๋ฐ๋ผ์ ์ ๊ทผ ๋ฐฉ์์ ๋ณ๊ฒฝํ๊ณ ์ด๋ฌํ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋ค์ ํด๊ฒฐํ๋ ๋์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๊ฐ์ ํ๋ ๋ฐ ์๊ฐ์ ํฌ์ํฉ์๋ค. ์ฐ๋ฆฌ๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ํ์๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ์๋ต ์ฑ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋๋ฒ๊ทธํ๊ธฐ ์ด๋ ต์ต๋๊น? ๊ตฌ์ฑ ์์๋ฅผ ๋ถํดํ๋ฉด ์ธ๋ผ์ธ ์คํ์ผ์ด ๋ ์์์ง๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ํ์ง๋ง ๋
ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค! ํ์ํ ๊ฒ์ Object.assign
์ ์ฐธ์ฌํ๋ ํญ๋ชฉ์ ํ์ธํ์ฌ ์คํ์ผ์ ์ถ์ฒ๋ฅผ ํ์ธํ๋ ์ค๋จ ์ ๋ฟ์
๋๋ค.
๋ฌผ๋ก ๊ทธ๊ฒ์ ์ ๊ฐ ํ ๋ก ์ ๋งค์ฐ ๊ฐ๋ฐฉ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฟก ๋นต๋จ
๋น์ ์ ๋ช ๊ฐ์ง ํ๋ฅญํ ํฌ์ธํธ๋ฅผ ์ฌ๋ฆฝ๋๋ค. ๊ฐ์ฌ. ์ผ์ข ์ ํ์ด๋ธ๋ฆฌ๋ ์๋ฃจ์ ์ด ๊ฐ๋ฅํ์ง ๊ถ๊ธํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ค ๊ฐ๋๋ฅผ ์ทจํ๋๋ผ๋ ๋ง์ ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค ๐
๋ค์ ์ฃผ์์ด ์์ ์ ํ ์๊ฐ์ด ์์ต๋๋ค. ๋ํ๋ฅผ ๋๋๊ณ ์๋ฆฌํ ์์ด๋์ด๋ฅผ ์๊ฐํด ๋ผ ์ ์๋์ง ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๋ณํ๋์ ์ต์ํํ๊ณ ์ด๋ฏธ ํด๊ฒฐ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ ๊ฐ์ง ์ค์ํ ๋ชฉํ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ๋ํด ๋ ์๊ฐํ ํ์๊ฐ ์์ต๋๋ค ๐ ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ ๋ ๊ฐ์ง ์ ์ ํด๊ฒฐํ๋ ํ ์ฐ๋ฆฌ์ ์๋ฃจ์ ์ ๋ง์กฑํ ๊ฒ์ ๋๋ค.
๋ ๋ค๋ฅธ ์์์ ๋ฉ๋ชจ-lib ์ ์ฒด์์ ์ธ๋ผ์ธ / jsstyle / ๋ฌด์์ด๋ ์ ๋ํด ํน์ ์ฝ๋ ๊ท์น๊ณผ ๋์์ธ ํจํด์ ์ ์ฉํ๋ ์๋ํ ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ด ๋น์ ์ด 100 % ๋ฐ๋ํ๋ ๊ฒ์ ๋๊น?
@nathanmarks ์ ๋ SCSS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ 100 % ๋ฐ๋ํ์ง ์์ต๋๋ค (_ ์ง์ฅ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค _). ๊ทธ๋ฌ๋ ๋ด ๊ด์ ์์๋ ๋ง ๋ค๋ฅธ ๊ณจ๋ชฉ ์
๋๋ค.
React์ ์ฃผ์ ์ฅ์ ์ค ํ๋๋ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ํน์์ฑ์ ์ถ์ํ ํ DOM์
๋๋ค.
๋ด๊ฐ ์๋ ํ React Core Team์ ์ฅ๊ธฐ์ ์ธ ๋ชฉํ๋ ํฌ๋ก์ค ํ๋ซํผ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๊ธฐ์ํ API๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. ์ค์ ๋ก ๊ทธ๋ค์ ํ์ฌ์ด ๋ฐฉํฅ์ผ๋ก
@alitaheri์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๋ค์ ๋ ๋จ๊ณ๋ก ์์ํ ์ ์์ต๋๋ค.
getStyles
ํจํด์ ์ฌ์ฉํ์ญ์์ค.@oliviertassinari ์ ๋ ๋ง ๋ค๋ฅธ ๊ฒฐ๋ก ์ ๋์ํฉ๋๋ค-๊ทธ๊ฒ์ ๋ฏธ๋๊ฐ ์๋๋๋ค. JS ์คํ์ผ์ด ์ฐ๋ฆฌ๋ฅผ ์ํด ์๋ํ๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ํ๋ฅผ ์๊ทนํ๊ธฐ ์ํด ํฌ๊ฒ ์ ๊ธฐํ์ต๋๋ค. ๋๋ ์ฌ๊ธฐ ์ฃผ๋ณ์ ๋ช๋ช ์ฌ๋๋ค์ด ๋ฌธ์ ๋ฅผ ๋๋ฌ์ผ ์ข์ ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์์ต๋๋ค.
์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์ฌ์ฉํ๋ getStyles()
ํจํด์๋ ์์ฒด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. @alitaheri ์ ์ ๋ ์ค๋ JS ์คํ์ผ ์ค์ (ํ
๋ง ํฌํจ!)์ ๊ฐ์ ํ๊ธฐ ์ํดํด์ผ โโํ ์ผ์ ๋ํด ๊ฝค ์ข์ ๋ํ๋ฅผ
๋ค์ ์ฃผ์๋ ํด๊ฐ ์ค์ด๋ฉฐ ๋ชจ๋ ์คํ์ผ์ JS ๊ธฐ๋ฐ์ผ๋ก ์ ์งํ๋ฉด์ ํ์ฌ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์คํ ํ ๊ฒ์ ๋๋ค.
Lessons Learned At React Amsterdam (https://medium.com/@kitze/lessons-learned-at-react-amsterdam-51f2006c4a59#.o12h794or)์์์ด ๊ฒ์๋ฌผ์ ์ฝ๊ณ React์ ์คํ์ผ๋ง ์๋ฃจ์ ์ ๋ํ ํ๋ ์ ํ ์ด์ ์ค ํ๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค. http : //slides.com/kof/javascript-style-sheets#/ ์ด ํ ๋ก ์ ๋ํ์๊ธฐ ์ ์ ํ ํ๋ ์ ํ ์ด์ .
๋ด๊ฐ ๊ณ์ ์๊ฐํ๊ณ ๋ช ์ ์ ์ผ๋ก ์ธ๊ธ ํ ์ ์ด์๋ ํ ๊ฐ์ง ์๊ตฌ ์ฌํญ (์ ์ด๋ ๊ธฐ์ต ๋๋๋๋ก)์ ์น ์ ์ฉ๊ณผ ์น์ ์ง์ํ๊ณ ๋ค์ดํฐ๋ธ์ ๋ฐ์ํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ์๋๊ฐ ์น ์ ์ฉ ์ธ ๊ฒฝ์ฐ (์ฆ, React Native๊ฐ ์๊ตฌ ์ฌํญ์ด ์๋) ์ด๋ฏธ ํจ์จ์ ์ด๊ณ ๊ฐ๋ ฅํ๊ฒ ์ง์ํ๊ณ ์ฌ๋๋ค์ด ๋งค์ฐ ์น์ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ํ์ฉํ๋ ์๋ฃจ์ ์ด ์ข์ต๋๋ค. React Native๋ฅผ ์ง์ํ๋ ๊ฒ์ด ํ์๋ผ๋ฉด ๋ค๋ฅธ ์๊ตฌ ์ฌํญ ๋ฐ ์๊ตฌ ์ฌํญ์ด ์ด๋ฆฝ๋๋ค. ๊ธฐ์ ์ ํ, ํํ ๋ฑ์ ํ๊ฐํ ๋ ์๊ฐํ๊ณ ๋ช ์ฌํด์ผ ํ ์ฌํญ์ ๋๋ค.
๋ฟก๋ฟก
ํ๋ ์ ํ ์ด์ ์ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๋ฟก ๋นต๋จ
์ฐ๋ฆฌ๋ ๊ทธ ํ๋ ์ ํ
์ด์
์์ ์ธ๊ธ ๋ lib ๋ฅผ๋ณด๊ณ ์ถ์ ๊ฒ์
๋๋ค ( ์ฌ๊ธฐ ๋ฐ๋ชจ๊ฐ ์์ต๋๋ค ). ๋ง์ ์์
์ ์ ์ฝ ํ ์ ์์ต๋๋ค. ์ด์ ์ ์ดํด ๋ณด์์ง๋ง ๋ง์์ ๋ค์ง ์๋ ๋ช ๊ฐ์ง ์ฌํญ์ด์์์ต๋๋ค (์ : ๋
์ HoC์์ ๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์๋ฅผ ๋ํํด์ผํ๋ ์๊ตฌ ์ฌํญ). ๊ทธ๋ฌ๋ ์ฌ๊ธฐ ์์ ์์ต๋๋ค . ๊ทธ๋ ์ด์ ๊ฐ์ ๋ณ๊ฒฝ ์ ๊ตฌํํ๋ฉด HoC๊ฐ์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๊ณ ์ธ๊ธํฉ๋๋ค. ๋๋ ์ํธ ์ฐ๊ธฐ๋ฅผ ์ํด ๊ทธ ๋ฐฉ๋ฒ / ๋์์ธ์ ์ ํธํฉ๋๋ค ( aphrodite
์์๋ ๋ณผ ์ ์์ต๋๋ค).
๋๋ mixout
์ ํจ๊ป ์๋ ํ ์์๋ jss
๋ํ ์์ฒด ๋ฐ์ ๋ฐ์ธ๋ฉ์ ํญ์ ๋ง๋ค ์ ์์ต๋๋ค.
lib ์์ฑ์๋์ด ๋ฌธ์ ์ ๋ํ ๋ด ์๊ฐ๊ณผ ์ผ์นํ๋ค๊ณ ๋งํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ๊ฒ์ด ์คํ์ผ ์ํธ๊ฐ๋๋ ๊ฒ์ ์๋์ ์ดํดํด์ผํฉ๋๋ค. ๊ฐ์ฅ ๋์ ์ธ ๋ณ๊ฒฝ์ ์ํด์๋ ์ธ๋ผ์ธ ์คํ์ผ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
@nathanmarks ๊ตฌํ์ ๋งค์ฐ ์๊ณ ์๊ธฐ ๋งค์ฐ ์ฝ์ต๋๋ค. : grin :
https://github.com/jsstyles/react-jss/blob/master/src/index.js
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฐ๋ฆฌ๋ฅผ ๋์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค : +1 :
@alitaheri ๋ค ๋์ํฉ๋๋ค!
jss
๋ํ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ง์ ๋ฐ์ธ๋ฉ์ ์คํํ๊ณ ์์ต๋๋ค. ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๋ช ๊ฐ์ง ๋ฌธ์ / ์ ํ ์ฌํญ์ด ์์ต๋๋ค. (ํ๋๋ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์์
์ด ํ์ํ ์ ์์)
React ์ปค๋ฎค๋ํฐ์๋ JavaScript ์คํ์ผ๋ง์ด ์ต์์ ์๋ฃจ์
์ด๋ผ๋ ์ผ๋ฐ์ ์ธ ์ ์๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ๊ฐ์ ์ ๊ด์ฐฎ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๊ฐ์ง ์ฌ๋๋ค๊ณผ ์๊ฒฌ์ด ์ผ์นํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ JavaScript ์คํ์ผ๋ง์ด ๊ตฌํ๋๋ ๋ฐฉ์์ ๊ฑฐ์ ํญ์ CSS ๊ฐ๋ฐ์์ ๊ด๊ณ๊ฐ ์์ต๋๋ค. ๊ตฌํ์ ๋ชจ๋ ๋๋ฌด ์์ฃผ ์ ํธ style=/[element property]=
์ด์ className=
์์ ์ ์ผ์์์์ ๋ฐฉ์ง๋ฅผ CSS ๊ฐ๋ฐ์.
์ด์ ๋๊ธ์์ ์ ์ํ๋ฏ์ด ๋ ์ฌ๋์ด ํจ๊ป ์ ์ด ์์์ ๊ฒ ๊ฐ์์. ์คํ์ผ ์์ฑ์ ์ ์ฉํ๋ ค๋ฉด ๋จ์ํ ํ๋ ๋ฐฉ์์ ์ทจํด์ผํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์์ ๋ํ ์คํ์ผ ์์ฑ์ ์ง์ ์ ์ฉ์ ์์ฉ ํ๊ฑฐ๋ ์ด๋ฌํ ์คํ์ผ ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋ className์ ๋ง๋๋ ๊ฐ์ ์ ์ ๊ทผ์ ํ์ฉํด์ผํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋์์ ์ ํํ ์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์์ ์ธ ์๋ฃจ์ ์ฒ๋ผ ๋ณด์ ๋๋ค.
CSS ๊ฐ๋ฐ์๊ฐ ๋จ์ํ ์ ๊ทผ ๋ฐฉ์์ ๋ฒ๋ฆฌ๊ณ ์ถ์ง ์์ ๋ฐ๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. ์ฌ๋๋ค์ด ์ ๊ทธ๊ฒ์ด ์ ์ตํ๋ค๊ณ ์๊ฐํ๋์ง ๋ณด๋ ค๋ฉด "์ CSS๋ฅผ ์ฌ์ฉํฉ๋๊น"๋ฅผ ๊ฒ์ํ์ญ์์ค. ์คํ์ผ์ ์ถ์ํ์ ๊ฐ๋ ฅํ ์ ํ ์ธ์ด๊ฐ ์ด์ ์ค ํ๋์์ ์ ์ ์์ต๋๋ค. ์ค๋๋ CSS ์ฌ์ฉ์์๊ฒ ๋์์ด๋๋ ์์ฒญ๋ ์์ ์ฝ๋๋ฅผ ์์ง ๋ง์ญ์์ค.
๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ ์ด๋ค ์ ์ผ๋ก๋ ์ ๋ฌธ์ ์ธ CSS ํด์ค์ด ์๋๋๋ค. ์คํ์ผ๋ง์ CSS๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋ถ๋ค์ด ์์ต๋๋ค. ์ด ์๊ฒฌ์ ๊ฐ๋ฐ์๊ฐ ์ ํ๊ถ์ ๊ฐ์ง ์ ์๋๋ก ๊ตฌ์กฐ์ ์ผ๋ก ์ค๋ฆฝ์ ์ธ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ์ฅ๋ คํ๊ธฐ์ํ ๊ฒ์ ๋๋ค.
@rvbyron ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ ๋ณ๊ฒฝํ๋ ค๋ ์ฃผ๋ ์ด์ ์ค ํ๋๋ CSS๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์๋ฅผ๋ณด๋ค ์ฝ๊ฒ โโ์ฌ์ฉ์ ์ง์ ํ ์ ์๋๋กํ๋ ๊ฒ์
๋๋ค. jss
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด js ์คํ์ผ์ ํ์ฉํ๋ฉด์ CSS ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์คํ์ผ์ CSS๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ์ถ์
ํ !important
ํดํน์์ด ์ถ๊ฐ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฝ๊ฒ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.
@alitaheri ๋ฃ๊ธฐ
๋ค์ ๋งํ์ง๋ง, className ์ ๊ทผ ๋ฐฉ์์ ๋ํด ๋ค์ผ๋ ํ์์ ์ ๋๋ค. ์ด๋ฅผ ์ผ๋์๋๊ณ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ์ง๋ฌธ์ด ์์ต๋๋ค.
๋ฟก๋ฟก
์ด์์ ์ผ๋ก :
์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ ๋์ฌ. ๋ ๋์ ๊ฐ๋ฐ ๊ฒฝํ์์ํ ์ผ์ข ์ ๋์ ํ๊ธฐ๋ฒ๊ณผ ์ฌ์ฉ์ ์ง์ ํ ๋ง ID๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ๋ฌธ์์ด๋ก ์ค์ ํ ์๋์๋ ํด์ ์ ๋ฏธ์ฌ (ํ ๋ง ์ค์ ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ๋์ง ์์). ๋ ์ฅํฉํ ์์ฐ ์ต์ ๋๋ ์ฌ์ฉ์ ์ ์ ํ ์ฝ๋ฐฑ ํจ์๋ฅผ ํฌํจํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ๋ฃจํธ์ ํด๋์ค๊ฐ ํญ์ ํญ์ ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ง์ ์๊ตฌ ์ฌํญ๊ณผ ์ ์ ์ฌํญ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์,์ด ๋ชจ๋ ๋ ผ์์์ ๋ฒ์ด๋๋ ๊ฒ์ด ์์ต๋๊น? ๋ค์ ์กฐ์น๋ ๋ฌด์์ ๋๊น? ์ด material-ui์ react-jss๋ฅผ ๊ตฌํํ๋ ์์ ์ด ์์ต๋๊น?
@rvbyron ๋ค, ์ฐ๋ฆฌ๋ ๋ฌด๋ ๋ค์์ ๋ช ๊ฐ์ง ๋๋ต์ ์ธ ์์ด๋์ด๋ฅผ ์คํํ๊ณ ์์ต๋๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ธ ์์ด๋์ด๊ฐ ์์ผ๋ฉด์ด ๋ฌธ์ ๋ฅผ ์ ๋ฐ์ดํธ ํ ์์ ์ ๋๋ค.
์ ์ ๊ฒธ์ํ ์๊ฒฌ์ผ๋ก๋ CSS์ CSS๋ฅผ ์ปดํ์ผํ๋ ๊ฒ์ด ๋ฏธ๋์ ์ผ๋ถ๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ธ๋ผ์ธ ์คํ์ผ์ด ์ฐ๋ฆฌ ์ถ์ ํจ์ฌ ๋ ์ฝ๊ฒ ๋ง๋ค์๋ค๋ ๋ฐ ๋ชจ๋ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์งํ, ์ธ๋ผ์ธ ์คํ์ผ์์ ๋ณผ ์์๋ ์ ์ผํ ์ ํ์ : hover!
๋ฌธ์ ๋ : hover๊ฐ ์คํ์ผ์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ด๊ณ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋ฏธ๋์ฃผ์๋ ์ ์ณ๋๊ณ , ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ค์ ๊ตฌํํ๊ธฐ ์ํด ์นํธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์กดํด์ผํ๋ ์๋ฃจ์ ์ ๋ํ ์กฐ๊ธฐ ์ฝ์์ ํผํ๋ ๊ฒ์ด ํ๋ช ํ ์ ์์ต๋๋ค.
@wtgtybhertgeghgtwtg ์ค์ ์คํ์ผ ์ํธ๋ฅผ ์ฌ์ฉํ๋ ์๋ฃจ์
์ ์ํด ๋
ธ๋ ฅํ๊ณ ์์ผ๋ฏ๋ก :hover
์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์ง์๋ฉ๋๋ค.
์ฃผ์ ํฌ์ธํธ๊ฐ ๊ฒฐ์ ๋์์ผ๋ฏ๋ก (className ๋ฐ ๋ฃจํธ ์์ classNames๋ฅผ ํตํ JSS ์คํ์ผ๋ง) material-ui v0.16.0 ๋ฆด๋ฆฌ์ค์ ๋ํ ๋ก๋๋งต๊ณผ ํ์ ๋ผ์ธ์ด ์์ต๋๊น?
@rvbyron ์ฝ์ ๋ ์ผ์ ์ ์์ง๋ง ์ง๊ธ์ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์๊ณผ ์ฑ๋ฅ์ด v0.16.0 ๋ฆด๋ฆฌ์ค์ ์ฃผ์ ์ด์ ์ด๋ฉฐ ํ์ฌ ์ ๊ทน์ ์ผ๋ก ์์ ํ๊ณ ์์ต๋๋ค. ๋ด๋ถ, API, ๋ง์ด๊ทธ๋ ์ด์ ๋ฑ๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์์ญ์์ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ ๊ฒฐ์ ํ๋ฉด ๊ฐ๊น์ด ์ฅ๋์์ด ๋ฌธ์ ๋ฅผ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
@newoga ๊ฐ์ฌํฉ๋๋ค Neil! ์ ๋ฐ์ดํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ค๋ฅธ ๋ฌธ์ ์ ๊ดํด์๋ className ๊ธฐ๋ฐ ์์คํ ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด ๋ง์ ์ฌ๋๋ค์๊ฒ ์๊ฐ์ ์ผ๋ก ํฐ ๋ณํ๊ฐ ๋ ์ ์๋ค๋ ์ ์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. ๊ทธ ์ธ์๋ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ค์ ๋ก ๋ฐฉํด ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋น์ ์ ํ์ด ์ต์์ ๊ท ํ์ ์ ํํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
@newoga ์ฌ๊ธฐ jss๋ material-ui ์คํ์ผ๋ง ์์คํ ์ ๋ฏธ๋๋ก ๋ถ๋ ค์ก์ต๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด 16.0 ๋ฆด๋ฆฌ์ค๋ฅผ ์์ํ์ฌ ์ง๊ธ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ jss๋ฅผ ์จ ๋ณด๋ฉ ํ ์์์๋งํผ ์ถฉ๋ถํ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ๋๊น?
@sorahn ์์ง
@sorahn ์ด ๋ฌธ์ ๋ ์ฌ์ ํ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ๋ํ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ์ป๊ธฐ ์ํด ๊ณ ์๋์์ต๋๋ค. ๊ณต์์ ์ธ ๊ฒฐ์ ์ ๋ด๋ ค์ง์ง ์์์ต๋๋ค. ํ์ฌ๋ก์๋ ๋ชจ๋ ์ฌ๋์ด ์์ ๊ณผ ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ ํฉํ ์คํ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์ ๊ทผ ๋ฐฉ์์ ์ ํํ๊ณ ์ฌ์ฉํด์ผํฉ๋๋ค.
๊ธฐ๋ก์ ์ํด์ด ์คํ์ผ ๋ณ๊ฒฝ์ ๋ชฉํ๋ ๋ชจ๋ ์ฌ๋์ ๋ค๋ฅธ ํ์ค์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ์ฉํ๋ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ๊ด๊ณ์์ด Material-UI ๊ตฌ์ฑ ์์๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ๊ณ ์คํ์ผ์ ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
tl; dr ์๋์ค! ๋ค๋ฅธ ์ฌ๋์ด ๋งํ๋ ๊ฒ์ด ์๋๋ผ ๋น์ ์๊ฒ ๊ฐ์ฅ ์ข์ ๊ฒ์ํ์ญ์์ค :)
@nathanmarks @newoga ์ ๋ฐ์ดํธ
๋ชจ๋ ์ธ๋ผ์ธ ์คํ์ผ์์ ๋ฐ์ ํ ๋์์ธ + ์๋ฒ ์ธก ๋ ๋๋ง์ ํ๊ณ์ ๋ถ๋ช ํ๊ณ ์์ผ๋ฏ๋ก ๋์์ ์กฐ์ฌํ๊ณ ์์ต๋๋ค. (s) css-modules ๋๋ csx ๋ฑ์ ๋ํด ํน๋ณํ ๊ฐํ ์๊ฒฌ์ ์์ง๋ง material-ui๋ฅผ ์ข์ํ๋ฏ๋ก ์ฌ๋ฌ๋ถ์ด ๋ฌด์์ ํ ๊ฒ์ธ์ง ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. :)
๋๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ฌ๊ณ ์ด ์ค๋ ๋๋ฅผ ์ฝ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ ๊ณผ ๊ธฐ์ฌ๋ฅผ ์ดํด ๋ณด์์ต๋๋ค.
์ ๋ JSS + CSX ์๋ฃจ์ ์ ์ ๋ง ์ข์ํฉ๋๋ค (๊ฐ๋ฐ์ _joy_ ๊ด์ ์์ ๋ณผ ๋).
JSS ์ด์ ๋ฐ ์ฑ๋ฅ
@sorahn ๊ณผ ์ ์ฌํ๊ฒ ๊ธฐ์ฉ๋๋ค. @nathanmarks ๊ฐ์ด ๋ฐฉํฅ์ผ๋ก ์์ ํ์ฌ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฒ์ฆํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ํ ๋ CSX / JSS ๊ฐ๋ฐ์ ๋ชจ๋ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฑํ์ ๋๊ณ ์ฅ๋ คํ๋ ๋ฐ ์ด์ฌ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@rosskevin ์ฐ๋ฆฌ๊ฐ ๋งํ๋๋๋ก ์์ ์ค์ ๋๋ค. ์ง๊ธ๊น์ง ์ด๋ค ์๋ฃจ์ ์์๋ ๋ค๋ฃจ์ง ์์ ๊ณ ๋ คํ ์ฌํญ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ์ ์๊ตฌ ์ฌํญ์ ์ค๊ณ ์ ํ์ด๋ ์๊ฒฌ์ผ๋ก ์ธํด ๊ธฐ์กด ์๋ฃจ์ ์ด ์ง์ํ ์์๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๊ด๋ฒ์ํฉ๋๋ค. ์ด๋ ๊ธฐ์กด ์๋ฃจ์ ์ด ๊ตฌ์ฑ ์์ API์ ์ฌ์ฉ์ ์์ ํ ์ ์ด ํ ์์๋ ์ฑ๊ณผ ๋ค์ํ ๋๊ตฌ๋ก ๊ตฌ์ฑ ์์๋ฅผ ์คํ์ผ๋งํ๋ ค๋ ๋ค์ํ ์ฌ์ฉ์ ์งํฉ์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ผ๋์๋๊ณ ๊ฐ๋ฐ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@sorahn ๋น ๋ฅธ ์ง๋ฌธ-์๋ฒ ์ธก ๋ ๋๋ง๊ณผ ํจ๊ป ๊ณต๊ธ ์ ์ฒด ์ ๋์ฌ์ ๋ํด ๋ฌด์์ํ๊ณ ์์ต๋๊น? ์๋ฒ์ ๋ชจ๋ ์ ๋์ฌ๋ฅผ ๋ ๋๋งํ๊ณ ์์ต๋๊น? ์๋๋ฉด UA๋ฅผ ํต๊ณผํ๊ณ ์์ต๋๊น?
@nathanmarks ์ฐ๋ฆฌ๋ ์ฌ์ฉ์ ์์ด์ ํธ๋ฅผ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด๊ณ ์์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ ์์กดํ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํญ๋ชฉ์ ๋ฐฐ์นํ๊ณ ์ฌ๋๋ค์ด muiTheme ๊ฐ์ฒด์ ์ํ์ ํตํด ์ฌ์ ์ํ๋๋ก ํ์ฉํ๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฌด๊ฒ๋ํ์ง ์๊ณ ์ฌ๋๋ค์ด ์ ํํ๋๋ก ํ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
muiTheme: {
// other stuff...
stylePrefixes: ['webkit', 'moz', 'ms']
}
@sorahn ํ๋ฆฌํฝ์ค๊ฐ ์๋ ํ๋ฆฌํฝ์ค, all
ํจ์ค, UA ํจ์ค ๋ฑ ์ํ๋๋๋ก ํ ์ ์์ต๋๋ค.
@nathanmarks ๋ฐฉ๊ธ [email protected]์ ์ถ์ http://jsstyles.github.io/examples/index.html ์ด์๋ ssr์ ์๊ฐ ์์ต๋๋ค.
์ฌ๊ธฐ์ $ .02๋ฅผ ๋ฃ์ผ๋ฉด๋ฉ๋๋ค. ์ธ๋ผ์ธ ์คํ์ผ๊ณผ ์ํ๋ก๋ํ ์ ๋ํ ์์ด๋์ด๊ฐ ์ ๋ง ๋ง์์ ๋ค์ง๋ง ์คํ์ผ์ด ๋ถํธ ์คํธ๋ฉ 4์ ๊ฐ์ scss์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์์ ๊ธฐ๋ฐ์๋๋ฉด ๋ ์ฌ์ธ ๊ฒ ๊ฐ์ ๋๋์ด ๋ญ๋๋ค.
๋ด๊ฐ ์ผ๋ฐ์ ์ผ๋กํ๋ ์ผ์ ๋ง ๊ทธ๋๋ก bootstrap.scss ํ์ผ๊ณผ _variables.scss ํ์ผ์ ๋ณต์ฌํ๋ ๊ฒ์ ๋๋ค. ๋ณ์์ ๋ฏน์ค ์ธ, node_modules์ ๋ค๋ฅธ ๋ชจ๋ ๋ฒ์ ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ ๋์ ...
๊ทธ๋ฐ ๋ค์ ์นํฉ ๊ตฌ์ฑ์ ์ค์ ํ์ฌ sassLoader ๊ตฌ์ฑ์ ๋ํ ๊ฒ์ ๊ฒฝ๋ก์ ./lib/style ๋ถ๋ถ์ ๋ง๋ญ๋๋ค.
์ด๋ฐ ์์ผ๋ก ๋ถํธ ์คํธ๋ฉ ๋ฑ์๋ก๋ํ๋ main.scss ํ์ผ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ๋๋จธ์ง ํ๋ก์ ํธ ๋ด์์ ๋ณ์ ๋ฐ / ๋๋ ๋ฏน์ค ์ธ์ ์ฐธ์กฐ ํ ์ ์์ผ๋ฉฐ ์ถ๋ ฅ์ ๋น๋ / ๋ฒ๋ค ํ ๋ ์ ์ ํ ์คํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํฌํจ.
์ด๊ฒ์ ๋จ์ ์ material-ui๋ฅผ ์์ค (์ฌ์ ๋น๋๊ฐ ์๋)๋ก ์ฌ์ฉํ๊ณ ๋ฒ๋ค์ scss๋ฅผ ํฌํจํ๊ธฐ ์ํด ์นํฉ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ท์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ, ๊ธฐ์กด ๋ณ์, ํด๋์ค ๋ฐ ์คํ์ผ๋ง ๋ฏน์ค ์ธ์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ง์ ์ ์ธ ๊ฒฝ๋ก ์ผ ๊ฒ์ ๋๋ค.
๋ค์ ๋งํ์ง๋ง, JS ์คํ์ผ๋ง์ ์์ด๋์ด๊ฐ ์ ๋ง ๋ง์์ ๋ญ๋๋ค. Aphrodite๊ฐ ์ ๊ณตํ๋ ๊ฒ๊ณผ ๊ฐ์ tbh ... ์ธ๋ผ์ธ ์คํ์ผ์์ํ ์คํ์ผ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋น์ทํ ์์ ์ํ๊ณ ์์์ง๋ง Aphrodite๋ ์ด๋ฏธ ๋ชจ๋ ์์ ์ ์ํํ๊ณ ์์ต๋๋ค. ๊ณํํ๊ณ ์์ต๋๋ค.
์คํ์ผ๋ง ์๋ฃจ์ ์ด ์์ฑ ๋์์ต๋๊น?
์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ค, next
์ง์ ์ jss
๋ฐฉ๊ธ์ด ํ๋ก์ ํธ๋ฅผ ์ ํ๊ฒ๋์๊ณ ๋ฉ์ง๊ฒ ๋ณด์๊ณ ์์ ํ์ด์ง๋ฅผ ํตํด ๊ตฌ์ฑ ์์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋งค์ฐ ์ฝ๊ฒ ํ์ ํ ์ ์์๊ณ ๋๋ฆฌ ์ฌ์ฉ ๋ ๊ฒ์ฒ๋ผ ๋ณด์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํฅ๋ถ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ธ๋ผ์ธ ์คํ์ผ์ ๋งค์ฐ ์ค๋งํ๊ณ ์ฌ๋ฌ๋ถ๋ค์ด ๊ทธ๋ค๋ก๋ถํฐ ๋ฒ์ด๋๋ ๊ฒ์ ๋ณด๋ ๊ธฐ์ฉ๋๋ค. ์ ๊ฐ ์ง์ ํ๊ณ ์ถ์ ๊ฒ ์ค ํ๋๋ ์ด๋ฌํ ๊ตฌ์ฑ ์์ ์ธ๋ถ์ ๋ ์ด์์๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์์ ์ ์ ๊ฑฐํ๊ณ ๋ถ๋ชจ ๊ตฌ์ฑ ์์์ ์คํ์ผ์ด์ด๋ฅผ ์ฒ๋ฆฌํ๋๋กํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ๋ฎ์ ์์ค์ ๊ตฌ์ฑ ์์์๋ ์ฃผ๋ณ ์์๋ฅผ ๋ฐ์ด๋ด๋ ์ด๋ค ๋ฐฉ์ ์ผ๋ก๋ ์ฌ๋ฐฑ์ด๋ ํจ๋ฉ์ด ์์ด์ผํฉ๋๋ค. ํนํ ์ธ๋ผ์ธ ์คํ์ผ์ ์๋ง์ผ๋ก ๋ง๋ค์ง ์๊ณ ์ฌ์ ์ํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ณ์ ํํค ์น๊ณ ์ํ ๋ฐฉ๋ฒ์ ์ฐพ์์ผํฉ๋๋ค. ๊ทธ. ๋ถํํ๋ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์์ด ํ๋ก์ ํธ์ ๋ํด ๋ ๊น์ด ํ๊ณ ๋ค์ง ์์์ต๋๋ค. ๋๋ ํ์คํ ์ธ๋ผ์ธ ์คํ์ผ๊ณผ CSS ์คํ์ผ์ ๋ํ ๋ง์ ํ ๋ก ์ ์ฝ์์ต๋๋ค. ์ด์จ๋ , ๋น์ ์ TextField์์ ๋๋ฅผ ์์์ต๋๋ค. ์๋จ์๋ 14px์ ์ฌ๋ฐฑ์ด ์๊ณ ํ๋จ์๋ 16px์ ์ฌ๋ฐฑ์ด ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ฌ์ ์ํ๊ธฐ ์ํด ๋จ์ํ ์คํ์ผ์ ์์ฑํ๋ ๊ฒ์ ๋๋ฌด ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ธ๋ผ์ธ ์คํ์ผ๋ง ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋น์ ์ ์ปดํฌ๋ํธ๋ฅผ div๋ก ๋ํ ํ ๋์ ๊ฐ์ด ๊ทธ๊ฒ์ ๋ค์ง๊ธฐ ์ํด ๋ ๋์ ์์ค์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํด์ผํ๋ค๋ ๊ฒ์ ๋์๊ฒ ์์ ํ ๋ฏธ์ณค๋ค. ๊ทธ๋ฆฌ๊ณ margin : -14px 0 -16px ๋๋ ๋ด๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ณ์ฐ์ ํตํด ์ฝ๊ฐ ์กฐ์ ํ์ง๋ง ์ด๋ค ์ ์ผ๋ก๋ ์์ ํด์ผ ํ ํ์๋ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ์ด ์ด๋ฏธํ๋ ๊ฒ์ฒ๋ผ className์ด prop์ผ๋ก ์ ๋ฌ๋๋๋ก ํ์ฉํ๋ค๋ฉด ๋ ์ด์์ ์คํ์ผ๋ง์ ์ปค๋ฎค๋ํฐ๊ฐ ์คํ์ผ๋งํ๋ ค๋ ๋ฐฉ์์ผ๋ก ์ปดํฌ๋ํธ์ ์ ์ฉ ํ ์ ์๋ค๋ฉด ํจ์ฌ ๋ ์ ํธํฉ๋๋ค. ์ด์จ๋ ๊ทธ๊ฑด ๋ด $ .02์ ๋๋ค.
์ฌ๊ธฐ์ ์ถ๊ฐํ๊ธฐ ์ํด, ์ด๋ค์ ๋ํ ๋ ์ด์์ ์ ํ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ ์ด์์ ์์ฑ์ ์ฒ๋ฆฌํ๊ธฐ์ํ ์ถ๊ฐ ์ํ์ ๋ง๋๋ ๊ฒ์ด ํ์ด๋ฐ์ด์ ๋ฐ ๋ถํธ ์คํธ๋ฉ๊ณผ ๊ฐ์ ๊ทธ๋ฆฌ๋ ์์คํ ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ด์์ ์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํฌ๊ธฐ, ๊ฑฐํฐ, ๋๋น, ์ด ๋ฑ๊ณผ ๊ฐ์ ์ํ์ ์ฌ์ฉํ์ง๋ง ๊ตฌ์ฑ ์์์์ ๋ณผ ์์๋ ์ธ๋ถ ์ฃผ์์๋ ์คํ์ผ๋ง์์ด ์์ํฉ๋๋ค.
๋๋ @ jbsmith969์ ์์ ํ ํจ๊ปํฉ๋๋ค.
๊ตฌ์ฑ ์์๋ฅผ div๋ก ๋ํํ๊ณ margin : -14px 0 -16px๋ฅผ ์ํ ํ ๋์ ๊ฐ์ด ๋ ๋์ ์์ค์ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค์ด์ผํ๊ฑฐ๋ ๋ด๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ์ฌ ์ฝ๊ฐ ์กฐ์ ํด์ผํ๋ค๋ ๊ฒ์ ์์ ํ ๋ฏธ์ณค์ต๋๋ค.
@ jbsmith969 ์ ์์ค ๊ตฌ์ฑ ์์์๋ ๋ ์ด์์ ๋
ผ๋ฆฌ๊ฐ ์์ด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฑ ํน์ด์ฑ์ ์ํด ๋ ๋์ ์ถ์ํ ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋๋ ๊ฒ์ ์ ํ ๋ฏธ์น ์๋ฆฌ๊ฐ ์๋๋๋ค.
IMHO๋ React๊ฐ ๊ฐ๋ฅํ๊ฒํ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํจํด ์ค ํ๋์
๋๋ค (๊ฒฉ๋ฆฌ ์์ฑ ๋๋ถ์).
@oliviertassinari @ jbsmith969 ๊ทธ๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ๋ฌด์จ ์ง์ํ๋์ง! ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์์ฑ CustomTextField
๋ค์ ๋ฐ์ผ๋ก ๋ ๋๋ง, ๋ด๊ฐ 2 PARAMS (ํ๋ ์ด๋ฆ, ์์)๊ณผ ๊ฐ์ ํจ์ค ๊ตฌ์ฑ ์์๋ฅผ, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋จ์ง ๊ทธ ์ฃผ์ ๋ก์ง์ ์์ ๋นํธ๋ฅผํ์ง material-ui/TextField
๋ญ๋ ์ฐ๋ฆฌ ํ์.
๋๊น์ง ๊ตฌ์ฑ ์์์ ๋๋ค!
๊ทธ๋์ ๋ฐ์์ผ๋ก ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ html์ ๊ฐ์ ธ ์์ js์ ๋ฃ์ต๋๋ค. ๊ทธ๊ฒ์ ํ๋ฅญํ๊ณ ๋ฉ์ง๋๋ค. ํ์ง๋ง CSS๋ฅผ ๊ฐ์ ธ ์์ html๋ก ๋ฐ์ด ๋ฃ์๊น์? ๋ค๋ฅธ ์ฌ๋๊ณผ ์ ์ด์ธ๋ฆฌ์ง ์๋์?
sass์์ ๋ฒ์ด๋๋ ์ด์ ์ ๋ฌด์์ ๋๊น?
๊ตฌ์์ด๋ผ๊ณ ๋ถ๋ฅด์ง ๋ง js / html๊ณผ css๋ฅผ ๋ณ๋๋ก ์ ์งํ๋ ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์๋ชป ๋์์ต๋๊น?
ํฉ๋ฒ์ ์ผ๋ก ์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ๋ต๋ณ์ ์ฐพ๊ณ ์์ต๋๋ค ...
https://github.com/callemall/material-ui/issues/3614#issuecomment -249095805์ ๊ด๋ จํ์ฌ ์คํ์ผ๋ง์ ๋จ์ํ ๊ตฌ์ฑ ์์๊ฐ๋ฉ๋๋ค.
CSS ํด๋์ค๋ฅผ ์๋ก์ด ๊ตฌ์ฑ ์์๋ก ๋ด
๋๋ค. (์ : btn-danger
-boostrap์ ์ ์ฌ)
const DangerButton = ({ hoverColor, style, ...others }) => {
return (
<MUI.FlatButton
hoverColor={hoverColor || Colors.pink100}
style={{ color: Colors.black, ...style }}
{...others}
/>
);
};
ํ์ง๋ง ์ ํ์ ๊ณ ํต์ ๋๋ค ..
( @ jbsmith969์ ๊ฒฝ์ฐ MUI๋ ๋จธํฐ๋ฆฌ์ผ ๋์์ธ ์ฌ์์ ๋ฐ๋ฆ ๋๋ค. ์ฌ์์ ๋ฐ๋ฅด๊ณ ์ถ์ง ์๋ค๋ฉด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ MUI๊ฐ ํดํนํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฐ ๋์ํ์ง๋ง ์ฃผ๋ก ์ผ๊ด์ฑ์ด์๋ ์ด์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์คํ์ผ์ด ์ธ๋ผ์ธ์ด๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค.)
@vizath ๋ง์ต๋๋ค ๋๋ ํ์คํ ๊ฐ์ ์๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ์ง๋ง์ด ์๋ฃจ์ ์ ์ฅ์ ์ ๋ฌด์์ ๋๊น?
์ค์ ๋ก ์๋๋ผ ๋จ์ง CSS๋ ์๋ ํ ์ ์ด๋ ์ผํ ํด๊ฒฐ์ฑ ์ด ์์๋ค๋ฉด, ๋๋ ์ด์์ฃผ๊ณ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ๋ ๊ฒฝ๊ณ ์์ด์ด๋ฅผ ์ํ ํ ์์๋ ์๋ฃจ์ (๋ด๊ฐ ์๊ณ ์๋)์ด ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์์ญ์ด๋ฅผ ๋ณด์ง ๋ชปํฉ๋๋ค.
์ด ์ ์ฅ์๊ฐ ์๋ฃจ์ ์ ๋ํ ์ํ ๋จ๊ณ ์์ด๋์ด๋ฅผ ๋งค์ฐ ์ ์ฉํ ์ฝ๋๋ฒ ์ด์ค๋ก ์ฑํํ๋ ค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋๋ ์ฐ๋ฆฌ๊ฐ ์์ง tec๊ณผ ํจ๊ป ์๋ค๊ณ ์๊ฐํ์ง ์์ผ๋ฉฐ ์ด๊ฒ์ด ๊ทธ tec์์ํ ์ ์ ํ ํ ์คํธ ๋ฒ ๋๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@nathanmarks JSS๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์์ ์คํ์ผ์ ์ฌ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์กฐ์ธ ํด ์ฃผ์๊ฒ ์ต๋๊น? next
์ ์ต์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํธ์ง : ์ข์, ์์ง ์์ ํ ๊ตฌํ๋์ง ์์๋ค๋ ๊ฒ๋ง ์์ ๋์ต๋๋ค. ๋ด ์๋ชป์ด์ผ! ๐ฌ
๊ฐ์ฒด ํค์์ ์ฃฝ์ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ์ข์ ๋ฐฉ๋ฒ์ ์์ง ์ฐพ์ง ๋ชปํ๊ณ JSS๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ผ์ ์ ์ฅํด์ผํฉ๋๋ค.
next
๋ถ๊ธฐ์ ๊ตฌ์ฑ ์์์์๋ ์์์ ์ (์๋ฃ๋์ง ์์) : https://github.com/callemall/material-ui/blob/b372f6223ec2528dbe02f100e4802334f88445b7/src/IconButton/IconButton.js#L36
primary
๋ฐ accent
ํด๋์ค๊ฐ ์ฌ์ฉ๋์ง ์์์ ์์ ์ ์ผ๋ก ์ฐพ์ ์์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฐ์ ์ด์ ๋ก MUI๊ฐ ์ด์ ์ ์ธ๋ผ์ธ ์คํ์ผ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด ๋ง์์ ๋ค์ง ์์์ต๋๋ค (์คํ์ผ์ด ๋ณ๋๋ก ์ ์ ๋ ๊ฒฝ์ฐ Lint๋ ๋ฏธ๋ฐ์ก ๋ณ์๋ฅผ ํฌ์ฐฉํ์ ๊ฒ์ ๋๋ค. https://github.com/callemall/material-ui/blob/ ์ฐธ์กฐ) 60a202fdc9645aa00f20c52e5152f168a1b0031b / src / IconButton / IconButton.js # L26).
sass์์ ๋ฒ์ด๋๋ ์ด์ ์ ๋ฌด์์ ๋๊น?
@gdaunton ์ธ๋ผ์ธ ์คํ์ผ / sass ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ธก๋ฉด์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์ฌ์ฉ์ ๊ด์ ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ์ ๊ณต ํ ๊ฒ์ ๋๋ค.
๊ธฐ์ฌ์ / ๊ด๋ฆฌ์ ๊ด์ ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ฌํญ์ ์ ๊ณต ํ ๊ฒ์ ๋๋ค.
์ด ์ ์ฅ์๊ฐ ์ํ ๋จ๊ณ ์์ด๋์ด๋ฅผ ์ฑํํ๋ ค๋ ์ด์
์ํ ๋จ๊ณ ์์ด๋์ด๊ฐ ์๋ฏธํ๋ ๋ฐ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
์ฐ๋ฆฌ๋์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์ผํ ์ฌ๋์ด ์๋๋๋ค. ์ : AirBnB, Khan Academy, ReactNative.
์ ์ด๋ CSS๋งํผ ์ ์๋ํ์ต๋๋ค.
CSS๋ ์ฒ์๋ถํฐ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ฌธ์์ ์คํ์ผ์ ์ง์ ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
๊ทธ๊ฒ์ ์ฐ๋ฆฌ ์
๊ณ์ ์ฃผ์ ๋ณํ์
๋๋ค.
๋ด ๊ด์ ์์ ๋ณผ ๋ ์คํ์ผ๋ง ๊ตฌ์ฑ ์์๊ฐ ์ง์ฆ๋ฉ๋๋ค .
์น ์ฌ์ ๋ค์์๋ ์ฌ๋๋ค์์ด ๋ฌธ์ ๋ฅผ ์ ์๊ณ ์์ผ๋ฉฐ _Web Components_์ ๋ก์ปฌ ๋ฒ์ ์คํ์ผ๋ก ํด๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค.
CSS ๊ฐ์ ๋ฐ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์คํ์ผ ์์ฑ๊ณผ ๊ด๋ จํ์ฌ React๊ฐ ์ถ์ ๋ ์ดํ ๋ชจ๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋์น ์ฑ ์
จ๋์?
๋ค, ๋ค์ ๋ถ๊ธฐ๋ jss๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
@nathanmarks ์ด ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ ค๋ฉด ์ด๋๋ก ๊ฐ์ผํฉ๋๊น?
์ฐพ์์ต๋๋ค : https://github.com/callemall/material-ui/blob/next/docs/customization/themes.md
@bramick ์ next
์ ๊ดํ ๊ฒ์ด ์๋๋๋ค.
์ข์, ๊ทธ๋์ ๋๋ ์๋ก์ด ๊ฒ์ ๋์น๊ณ ... ๋๊ตฌ?
@bramick next
๋ ์์ง ์์ ํ ๋ฌธ์ํ๋์ง ์์์ต๋๋ค (๊ทธ๋ฌ๋ ๋ฌธ์ํ ์ฌ์ดํธ๊ฐ ์์ต๋๋ค). ์ง๊ธ์ ์์ค๋ฅผ ์ฝ์ด์ผํ๊ณ ๋ฌธ์ ์ฌ์ดํธ ์์ค ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ฌ ์๋ ๋ฐฉ์์ ํ์ธํ ์ ์์ต๋๋ค. ์ผ๋ถ๋ ์ฌ์ ํ ์์ง์ด๋ ํ์ ์ผ ์ ์์ต๋๋ค.
ํธ์ ๋ด์ ๊ฐ๊ธฐ ๊น์ด์๋ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ ์ ์ผ๋ก ๋์ํ๋ค๊ณ ๋งํ ์๋ ์์ง๋ง ์ ๊ฐ ๊ฐ์ง ๋ช ๊ฐ์ง ์ง๋ฌธ์ ๋์ ์ ์ผ๋ก ํด๊ฒฐํ์ จ์ต๋๋ค.
๋์ํฉ๋๋ค. ์ฐ๋ฆฌ ์คํ์ผ์ด ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ์ธ๊ณ๋ก ๋์๊ฐ ์ผํ๊ณ CSS๊ฐ ๊ทธ์ ์ ํฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ (๋ด ์๊ฒฌ์ผ๋ก๋) ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ๋๊ท๋ชจ๋ก ์ฑํํ๊ธฐ ์ ์ ์ ๊ฑฐํด์ผ ํ ๋ช ๊ฐ์ง ์ฃผ๋ฆ์ด ์์ต๋๋ค.
๊ทธ๋๋ ๊ถ๊ธํฉ๋๋ค. ์ด์ ํ์ค CSS ์ฌ์ด์ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์๋์ง ํ์ธํ ์ฌ๋์ด ์์ต๋๊น? CSS๊ฐ ์๋ฐ ์คํฌ๋ฆฝํธ์ ์ฌ์ ํ ์ฐ์๋ฅผ ์ ํ๊ณ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ก๋ ํ ํ์๋ ์ฌ์ ํ ์คํ์ผ์ ์์ฑํ๊ณ ์ฝ์ ํด์ผํฉ๋๋ค.
@gdaunton https://github.com/cssinjs/jss/blob/master/docs/performance.md ์์ jss ์ฑ๋ฅ์ ๋ํด ์ฝ์ด๋ณด์ญ์์ค.
๋ ๋๋ง๋๊ณ ํ์ด์ง์ ์ถ๊ฐ๋์ง๋ง ๊ตฌ์ฑ ์์ ๋ด์์ ์์ฑ๋ ํ์ค CSS์
๋๋ค. ๋๋ next
๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๊ฝค ์ ์๋ํฉ๋๋ค.
@newoga ๋ง์ํ์ ๋ด์ฉ์ ๋ํ ๋งํฌ๋ฅผ ๋ณด๋ด ์ฃผ์๊ฒ ์ต๋๊น?
@bramick OMG! ์ ๋ง ๊ฐ๋จํ์ง ์๋์? ์๋ฅผ ๋ค์ด next
Button์ ๋ํด์๋ ์ฌ๊ธฐ๋ฅผ๋ณด์ญ์์ค .
JSX๊ฐ ์ฑ๊ณตํ ํ JavaScript ํ์ผ์ CSS๋ฅผ ๋ฃ๋ ๊ฒ์ด ๋งค๋ ฅ์ ์ด๋ผ๋ ๊ฒ์ ์ดํดํ์ง๋ง ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ CSS์ ๋ํด ๋์ผํ ์์ ์ ์ํํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋งค์ฐ ๋ณต์กํ ๋์ ์คํ์ผ์ ๋ค๋ฃฐ ๋ JSS์ ์ข์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๋์ ๊ฐ์ฅ ํฐ ๊ด์ฌ์ฌ๋ ์คํ์ผ ์ ๋ณด๊ฐ ๊ฒฐ๊ตญ ์ปดํฌ๋ํธ ์ ์๋ฅผ ๋ณต์ก ํ๊ฒ ๋ง๋ค ๊ฒ์ด๋ผ๋ ๊ฒ์
๋๋ค. JavaScript ๊ฐ์ฒด๋ก ํํ ๋ CSS๋ ํจ์ฌ ๋ ์ฅํฉ ํ๊ณ ๊ตฌ์ฑํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค . ์๋ฅผ ๋ค์ด, ์ด์ ๊ฒ์๋ฌผ์์ ์ฐธ์กฐํ Button
์ปดํฌ๋ํธ์์ ์ฝ๋์ ๊ฑฐ์ ์ ๋ฐ์ด ์คํ์ผ ์ ๋ณด์
๋๋ค. ๋ ์ด์ ์ฐ๋ ค์ ๋ถ๋ฆฌ๊ฐ ์์ต๋๋ค. ์คํ์ผ ์ฝ๋๋ฅผ ๋ณ๋์ ํ์ผ๋ก ์ฎ๊ธธ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์ฒ์๋ถํฐ JavaScript์์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ํฐ ๋จ์ ์ CSS ์์ฑ ๋ฐ ํด๋น ๊ฐ์ ๋ํ ๋ชจ๋ ์ธํ ๋ฆฌ ์ผ์ค ์ ๋ณด ๋ฅผ
๋ ๋ง์ ๊ฐ์น๋ฅผ ๊ฐ์ ธ๋ค ์ค๋ค๋ฉด ๋ด ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ ์ถ๊ฐํด๋ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋์ ์ถ๊ฐ CSS ๋ฆฐํฐ, ์ ์ฒ๋ฆฌ๊ธฐ, ๋ก๋ ๋ฐ ๋ด๊ฐ ๋ฐฐ์์ผํ๋ ์ถ๊ฐ ๊ตฌ๋ฌธ์ ์ ๊ฒฝ ์ฐ์ง ์์์ต๋๋ค. ๋๋ ๋ํ JSS์ ๋ํด ๊ณต๊ฐ์ ์ผ๋ก ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ์ฒซ ๋ฒ์งธ ๋ชจ์ต ์ดํ์ ๋๋ฅผ ์ค๋ํ์ง ๋ชปํ์ต๋๋ค.
๋ด ๊ฐ์ฅ ํฐ ๊ด์ฌ์ฌ๋ ์คํ์ผ ์ ๋ณด๊ฐ ๊ฒฐ๊ตญ ๊ตฌ์ฑ ์์ ์ ์๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ ๋ค๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์ ์ ์ผ๋ก ๋น์ ์๊ฒ ๋ฌ๋ ค ์์ผ๋ฉฐ, ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑ ํ๋๋์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ท์น์ ๊ณ ์ํ๋ฉด ๋์ ์ผ์ด ์ผ์ด๋์ง ์์ต๋๋ค (2 ๋ ์ ์์ฐ ๊ฒฝํ์์ ์ด์ผ๊ธฐ).
JavaScript ๊ฐ์ฒด๋ก ํํ ๋ CSS๋ ํจ์ฌ ๋ ์ฅํฉํ๊ณ ๊ตฌ์ฑํ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ ์์ค์ด ๋๊ณ ๋ฐ๋ณต ํ์๊ฐ ์ ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ๋ ์ฅํฉํฉ๋๋ค.
๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ํฐ ๋จ์ ์ CSS ์์ฑ ๋ฐ ํด๋น ๊ฐ์ ๋ํ ๋ชจ๋ ์ธํ ๋ฆฌ ์ผ์ค ์ ๋ณด๋ฅผ ์๋๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ชฉํ๋ material-ui ์ฌ์ฉ์์๊ฒ ์คํ์ผ๋ง์ ์ํ๋ ๊ฒ์ ์ฌ์ฉํ ์์๋ ์ ํ๊ถ์์ฃผ๋ ๊ฒ์ ๋๋ค. CSS ์๋ ์์ฑ์ ์์ฃผ ๋ฃ๋ ์ฃผ์ฅ์ ๋๋ค. ๋๋ถ๋ถ cssinjs๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์์ ์ฌ๋๋ค๊ณผ ์ด์ ์ ์ฌ์ฉํ๋ ํธ์์ฑ์ ์์ด ๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ํ ๋๋ ค์ ๋๋ฌธ์ ๋๋ค.
๋ ๋ง์ ๊ฐ์น๋ฅผ ๊ฐ์ ธ๋ค ์ค๋ค๋ฉด ๋ด ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ ์ถ๊ฐํด๋ ๊ด์ฐฎ์ต๋๋ค.
์์ ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ ์ฝ๋๋ฒ ์ด์ค๋ฅผ๋ณด๋ค ์ผ๊ด๋๊ณ ์ฌ์ฉ ๋ฐ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ชจ๋ ๋ณต์กํ ์๋๋ฆฌ์ค๋ฅผ ๋์์ ๋ค๋ฃน๋๋ค.
๋ด ๊ฐ์ฅ ํฐ ๊ด์ฌ์ฌ๋ ์คํ์ผ ์ ๋ณด๊ฐ ๊ฒฐ๊ตญ ๊ตฌ์ฑ ์์ ์ ์๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ ๋ค๋ ๊ฒ์ ๋๋ค.
ํ๋ก์ ํธ์์ ์ปดํฌ๋ํธ์ ์คํ์ผ ์ ๋ณด๋ฅผ ๋ณ๋์ ํ์ผ๋ก ์ถ์ถํ๊ณ ์นํฉ์ผ๋ก๋ก๋ํ์ต๋๋ค. ์ฃผ์ ์ด์ ์ ๋ชจ๋ ๊ฒ์ด ์ ๊ตฌ์ฑ๋์ด ์๊ณ ์นํฉ์ด ๊ตฌ์ฑ ์์๋ณ๋ก ์ฝ๋๋ฅผ ๋ฒ๋ค๋ก ์ ๊ณต ํ ์ ์์ผ๋ฏ๋ก js ์ฝ๋์ ์คํ์ผ ์ ๋ณด์ ์ฝ๋ ๋ถํ ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ํ ์คํ์ผ๋ง ๊ท์น์ ์์ฑํ๊ธฐ ์ํด ๋ก์ง์ ๋ถ๋ฆฌ ํ ๋ ์ฐ๋ ค ์ฌํญ์ด ๋ถ๋ฆฌ๋ฉ๋๋ค. ํ ๊ฐ์ง ์๋ ์ ์๋ ค์ง css ์ ์ฒ๋ฆฌ๊ธฐ์์ ๋ฏน์ค ์ธ๊ณผ ๋งค์ฐ ์ ์ฌํ stlying์ ์์ฑํ๋ ์คํ์ผ ํฉํ ๋ฆฌ ํจ์๋ฅผ ๋์
ํ ๊ฒ์
๋๋ค.
๋ด ์์ ์ ์์ ์ ํน์ ์ํฌ ํ๋ก์ฐ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ํ๋ก์ ํธ์ ํ์ ์๊ตฌ์ ๊ฐ์ฅ ์ ์ ์ํ ์์๋ ํจ์ฌ ๋ ๋ง์ ์ ์ฐ์ฑ์ ํ๋ณดํ๋ค๋ ๊ฒ์
๋๋ค.
์ด https://styled-components.com/ ํ์ธ
๊ธฐ์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ฒ์์ ํ๋ฐ๋ถ์ด์ง๋ง ์คํ์ผ ๊ตฌ์ฑ ์์๊ฐ ๋งค์ฐ ์ ๋งํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. SSR, ๋ฏธ๋์ด ์ฟผ๋ฆฌ, ๊ฝค ๋ฉ์ง ๊ตฌ๋ฌธ ๋ฑ์ ์ฒ๋ฆฌํฉ๋๋ค. JSS์ ๋น๊ตํ์ฌ ์๋ ์ ๋์ฌ ๋ฐ ํ ๋ง๋ ์ฒ๋ฆฌํฉ๋๋ค.
๋ด๊ฐ ์๋ ํ ๋ด๋ถ์์ postcss๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ฐํ์์ ์ฌ์ฉํ ๋ ํ์ฉ๋๋ ์ฑ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์๋ํ๋ฉด ๋ง์ ์์ง ์ผ์ด์ค ์ฒ๋ฆฌ ๋ฐ ํ๋ฌ๊ทธ์ธ์ด์๋ ์ ์ฒด CSS ํ์์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ์ด๊ฒ์ JSS JSON์ผ๋ก ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์์ํ ์ ์์ง๋ง, ์์งํ ๋งํด์ CSS ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ JS ๋ณ์ ๋ฐ ํจ์ ํธ์ถ๊ณผ ํผํฉํ๋ ๊ฒ๋ณด๋ค JS๋ฅผ ๋๊น์ง ์ฌ์ฉํ๋ ๊ฒ์์ ๊ทธ๋ค์ง ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ธ๊ธํ์๋ฉด ํ์ฌ ์คํ์ผ ๊ตฌ์ฑ ์์์ ๋น๋๋ ์ด๋ฏธ ์ถ์ ๋ 250kb์ ๋๋ค. ๊ณตํํ๊ฒ ๋งํ๋ฉด React์ co๋ฅผ ๋ฒ๋ค๋ก ๋ฌถ๊ธฐ ๋๋ฌธ์ด์ง๋ง PostCSS ํ์๋ง์ผ๋ก๋ ์ด๋ฏธ JSS ๋๋ Fela์ ํฌ๊ธฐ์ ๊ฐ๊น์ด 13kb (์ต์ํ๋์ง ์์, 2kb ~)๊ฐ ์์ต๋๋ค.
(ํ๋ ์ ํ ์ด์ ) ๊ตฌ์ฑ ์์์ ๋น ๋ฅด๊ณ ๊ฐ๋จํ ํ๋กํ ํ์ดํ์๋ ์ข์ง๋ง ๋ค๋ฅธ ์๋ฃจ์ ์ด ์ ๊ณต ํ ์์๋ ์ด์ / ๊ธฐ๋ฅ์ ๋ณด์ด์ง ์์ต๋๋ค.
๋์ํฉ๋๋ค. ์ ๊ฐ ๊ฐ๋ฐ ํ ๋์๊ด์์ ์ํํด ๋ณด์๋๋ฐ ๊ฒ์ํ๊ธฐ์ ๋๋ฌด ๋ฌด๊ฑฐ์ ์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ๊ทธ๊ฒ์ผ๋ก ์ง์ ์ ๋ณด์ผ ๊ฒ์ด๋ผ๊ณ ํ์ ํ์ง๋ง, ์ฌ๊ธฐ์์ JSS ์์ ์ ๊ฑฐ์ ์๋ฃ๋์๊ณ ๋๋ถ๋ถ์ ๋์ผํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
์ต๊ทผ react-toolbox๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก webpack์ sassLoader
์ ์์กดํ๋ CSS ๋ชจ๋์ ํ
๋ง๋ก ์ฌ์ฉํฉ๋๋ค. ์ ์๊ฒ๋ ์ ๋ง ์ ์๋ํ์ต๋๋ค. ์กฐ์ฌํด๋ณผ ๊ฐ์น๊ฐ ์์์ง๋ ๋ชจ๋ฆ
๋๋ค.
@mgcrea ์ ์๊ฒฌ์ ๋ ๋ฒ์งธ๋กํด์ผํฉ๋๋ค. react-toolbox ํ ๋ง ์ง์ ์ ๋๋์ต๋๋ค. ๊ตฌ์ฑ ์์์ ๋ชจ์์ ์ฌ์ฉ์ ์ง์ ํ๋ ๊ฒ์ด ํ๋ก ํธ ์๋ ์คํ ๋ฆฌ์ ๊ฐ์ฅ ์ค์ํ ์ธก๋ฉด์ ๋๋ค.
๋๋ ๋๊ตฌ๋ ์ข์ ์ค๋๋ CSS ์คํ์ผ์ด ๋จธํฐ๋ฆฌ์ผ UI์์ ์ผ๋ฅ ์๋ฏผ์ด ๋ ๊ฒ์ด๋ผ๊ณ ๊ธฐ ๋ํด์๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด react-toolbox
๊ฐ ์์๋ ์ด์ ์
๋๋ค.
์ ์ด๋์ด ์ฃผ์ ์ ๋ํ ๋ง์ ์ด์์ ๊ฒ์๋ฌผ์ ์ฝ์ ํ์ ์ธ์์ ๋๋ค. ํ์ด React Native ํธํ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ๊ฒ๊ณผ JSS๋ก ์ฝ๊ฒ ํด๊ฒฐํ ์์๋ ์คํ์ผ๋ง ์ฃ์ง ์ผ์ด์ค์ ๋ํ ๋ง์ ์๊ฒฌ์ ๋ชจํธํ๊ฒ ๊ธฐ์ตํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ ์ ๋ณด๋ ๋ง์ ํ ๋ก ์์ ์์ค๋ฉ๋๋ค. ์ด๊ฒ์ ๋ ผ๋์ ์ฌ์ง๊ฐ์๋ ์ฃผ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ฐ ์คํฌ๋ฆฝํธ ์คํ์ผ๋ง์ด ์ ๊ทธํ ๋ก ๊น์ด ๋ฟ๋ฆฌ ๋ด๋ฆฌ๊ณ ์๋์ง์ ๋ํ ๊ฐํ ์ธ๊ธ๊ณผ ํจ๊ป ํ๋ก์ ํธ ๋ชฉํ์ ์ฒ ํ (ํต์ฌ ๊ด๋ฆฌ์๊ฐ ์์ฑํ)์ ๋ํ ์ํค ํ์ด์ง๋ฅผ ๊ฐ์ง ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋๋ผ์ด ๊ฐ์น๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ผ๋.
React๋ฅผ์ํ ๊ฐ์ฅ ํ๋์ ์ด๊ณ ์ธ๋ จ๋ ๋จธํฐ๋ฆฌ์ผ ์คํ์ผ๋ง ํ๋ ์ ์ํฌ์ด๊ธฐ ๋๋ฌธ์ Material UI๋ฅผ ์ ๋ง ์ข์ํฉ๋๋ค. ๊ทธ๋ฌ๋ JSS๋ ํ์ฌ ๊ตฌ์ฑ ์์์ ํตํฉ ๋ ์คํ์ผ์ ์ ์งํ๊ณ ์ถ์ ๋ ๋ง์ ๋ํต์ ์ ๋ฐํฉ๋๋ค.
์ ๋ Material-UI๊ฐ react-toolbox์๋ ๋ฐ๋๋ก ์คํ์ผ๋ง์ ์ํํ๋ ๋ฐฉ์์ ๊ฐ์ฌ ๋๋ฆฌ๋ฉฐ ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํ๋ก์ ํธ ์ค ํ๋์์ ์ฌ์ฉ์๊ฐ ๋์ ํ ๋ง๋ฅผ ์ ํํ ์์๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๋ฏธ๋ฆฌ ๊ฒฐ์ ํ ์์๋ ์์ ์์ ์ ํํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉํ๋ ํ
๋ง ๊ตฌ์ฑํ๋ ๋งค์ฐ ๋์ ์ด์ด์ผํฉ๋๋ค. ์
๋ฐ์ ๋๊ตฌ ์์ ๋ฑ์์. al., ์ด๊ฒ์ ๋ด๊ฐ ๋ณผ ์์๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์ผ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@jrop ์,์ด ๋งค์ฐ ํน๋ณํ ๊ฒฝ์ฐ์๋ ๋์ JSS๊ฐ ํ์ํ์ง๋ง ์ค์ํ ์๊ตฌ ์ฌํญ์ด ์๋ ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ์ฌ๋ฃ UI๋ฅผ ์ฌ์ฉ์ ์ ์ํ๋ ํ์ฌ ์คํ ๋ฆฌ (UI ํ ์คํธ์ ๋ํด ๋งํ์ง ์์)๋ ํ์ฉ๋์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋๋ถ๋ถ์ ๋์ ๋ถ๋ถ์ด ํ์ํ๊ฑฐ๋ ์ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ์ฌ์ง UI ๋ชจ์์ ์ฌ์ฉํ ์์๋ ๊ณ ๋๋ก ์๊ฐ์ ์ด๊ณ ๋์์ธ ๋ ์ฑ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
@DominikGuzei jss๋ฅผ ์ฌ์ฉํ์ฌ next
๋ถ๊ธฐ๋ฅผ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํ์ฌ ๋ฆด๋ฆฌ์ค์์ ๋ณผ ์์๋ ๊ฒ์ด _ ์๋๋๋ค _.
์ฌ๋ฌ๋ถ, ์ฌ๊ธฐ์ ์ฃฝ์ ๋ง์ ์น๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. next
๋ถ๊ธฐ๋ ํ
๋ง์ ํจ๊ป ๋ค๋ฅธ (ํจ์ฌ ๊ฐ์ ๋) ๊ฒฝ๋ก๋ฅผ ์ ํํ์ผ๋ฉฐ ์ฌ์ ์๋ฅผ ํ์ฉํฉ๋๋ค. ๋ ์ด์ ์ธ๋ผ์ธ ์คํ์ผ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๋ด๊ฐ ์์ฒญํ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ ๋ง์ ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ์ ์ํ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ next
๊ตฌ์ฑ ์์์ ๋ํด HOC๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์ ์คํ์ผ ์ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
@nathanmarks ,์ด ๊ฒฐ์ ์ด ๋ด๋ ค ์ก๊ธฐ ๋๋ฌธ์ (๋ด๊ฐ ๋งํ ์์๋ ํ, ๊ฝค ์ ์๋ํฉ๋๋ค ๐), ์์ฝ์ ์์ฑํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ์ ๊ทธ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ๋ก์ ํธ ๋ชฉํ์ ์ฒ ํ (ํต์ฌ ๊ด๋ฆฌ์๊ฐ ์์ฑํ)์ ๋ํ Wiki ํ์ด์ง๊ฐ์๋ ๊ฒฝ์ฐ ์๋ฐ ์คํฌ๋ฆฝํธ ์คํ์ผ์ด ํ๋ ์ ์ํฌ์ ๊ทธํ ๋ก ๊น์ด ๋ฟ๋ฆฌ ๋ฐํ์๋ ์ด์ ๋ฅผ ๊ฐ๋ ฅํ๊ฒ ์ธ๊ธ ํ ์ ์์ต๋๋ค.
@fgarcia ์ด๋ฒ ์ฃผ ์ด ํ๋ฆฌ์์ ์ด๋ฆฐ ์ง์ญ ํ์ฌ์์ Material-UI๊ฐ ์ฌ์ฉํ๋ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ์งํ ์ ๊ดํ ํ๋ ์ ํ ์ด์ ์ํ์ต๋๋ค. ์ฌ๋ผ์ด๋์ _notes_ : ๋ ๋์ ์คํ์ผ์ ํฅํ ์ฌ์ ์ ๋ณด๋ ๋ฐ ๊ด์ฌ์ด์์ ์ ์์ต๋๋ค. ์ ๋ ๋์ , ๋ฌธ์ ๋ฐ ํด๊ฒฐ์ฑ ์ ์ค์ ์ ๋ก๋๋ค.
๋์ ํ ๋ง๋ฅผ ์ ํํ๋ ์ฌ์ฉ์
CSS-Modules์ ์ ์ ์คํ์ผ ์์ฑ ์ธก๋ฉด์ ์๋นํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ฐํ์์ ์คํ์ผ์ ์ฝ์
ํ๋ ๊ฒ์ ๋น์ฉ ํจ์จ์ ์ด์ง ์์ง๋ง ๋ค์์ ์ํ ํ ์ ์์ต๋๋ค.
CircularProgress
์๋ CSS ํค ํ๋ ์ ์ ๋๋ฉ์ด์
์ด ๊ตฌํ๋๋ ๋ฐฉ๋ฒ์ ์ฐ๊ฒฐ๋ ๊ณ ์ thickness
๊ฐ ์์ต๋๋ค. ๋์ ์คํ์ผ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋๋ก ๋๊ป ์์ฑ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. โ ๏ธ ํ๋ ๋นํ์ง ๋ง์ญ์์ค.@oliviertassinari ์ ๋ง ๊ต์ฅํฉ๋๋ค. CSS ๋ชจ๋๊ณผ ๊ด๋ จํ์ฌ ๋นํ์ค์ ์ธ ๊ด์ ์ ๊ฐ์ง๊ณ ์์ ์ ์์ง๋ง ๋ชจ๋ ์๋์ค๋ฌ์ด ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๋ฐ ์ด์ ๋ก material-ui๋ฅผ ํตํด JSS๋ฅผ ์ ํ๊ฒ๋์ด ๊ธฐ๋ปค์ต๋๋ค. CSS ๋ชจ๋๋ณด๋ค JavaScript ์ฒ ํ๊ณผ ํจ์ฌ ๋ ๋ฐ์ ํ ๊ฒ ๊ฐ์ต๋๋ค.
@oliviertassinari ํํ ์์ฝ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด๋ฌํ ์ธก๋ฉด์ ๋ณด๋ฉด ํ์คํ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ํ์ฌ JSS์ ์ํ๊ณ (postcss)์ ๋จ์ ์ ๋ชจ๋ ๊ฒ์ด ์ต์ฒจ๋จ์ด๋ฉฐ ๊ฐ๋จํ CSS ๋ชจ๋ + SASS์ ๊ฐ์ด ์ ํ๋ฆฝ ๋ ๋๊ตฌ ์ฒด์ธ ๋ฐ ์ง์ ๊ธฐ๋ฐ์ ์์กด ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ํ์ ์ ๋ํด ์ง๋ถํ๋ ๋๊ฐ์ด๋ฉฐ, ํน์ ์๊ตฌ ์ฌํญ์ด ์๊ฑฐ๋ ๋ฒ๊ทธ์ ๋ํ ๋๊ฐ๋ฅผ ์ง๋ถ ํ ์์ฌ๊ฐ ์๋์ง ์ฌ๋ถ์ ๋ ๋ฌธ์ํ ๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
JSS๋ css-modules ์ด์ ์ ์์ฑ๋์์ต๋๋ค. CSS ๋ชจ๋์ ๊ตฌ๋ฌธ์ ๋๋ฌด ๊ทผ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋๋ค์ ์ฌ์ฉ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฅด๊ฒ ๋์คํ๋์์ต๋๋ค.
์ฆ, "์๋ก์ด"๊ธฐ์ ์ธ react๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. SASS๋ฅผ ์ํ๋ค๋ฉด vanilajs ๋๋ backbonejs๋ ์ ํํด์ผํฉ๋๋ค.)
@kof React๋ ์์ญ๋ง ๋ช ์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๊ณ Facebook์์ ๊ด๋ฆฌํ๋ฏ๋ก (ํ๋ฃป๋ฐค ์ฌ์ด์ ์ฌ๋ผ์ง์ง ์์) ๋งค์ฐ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ด๋ฏ๋ก "์๋กญ์ง ๋ง"๋งค์ฐ ๊ฒฌ๊ณ ํ ์ ์์ต๋๋ค. ์ง๊ธ๊น์ง ๋ง์ ๋ฌธ์ ).
SASS๋ ๊ฐ์ฅ ์ ํ๋ฆฝ ๋ CSS ์ ์ฒ๋ฆฌ๊ธฐ ์ค ํ๋์ด๋ฉฐ ๋ชจ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋งค์ฐ ๊ฒฌ๊ณ ํ๊ณ ํ ์ด๋ธ์ ๋ง์ ๊ฐ์น๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋์ ๋๋ ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒฝ์ฐ (์ : ๋์ ํ ๋ง ๋๋ฌธ์) JSS์ ๊ฐ์ ๊ฒ์ ์ ํํ์ง๋ง ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ์ฐธ์ฌํ๋ ์์ฉ ์ํํธ์จ์ด ํ๋ก์ ํธ์์ ์๋ ๊ฐ์ ๊ฒฝํ / ํ๋ ์ ์ํฌ / ์ง์ ๊ธฐ๋ฐ ๋ฑ์ ๋ฒ๋ฆฌ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค. ๊ทธ๋์ JSS์์ ๋์ ํ ๋ง ์ธก๋ฉด ๋ง ๊ตฌ์ถํ๊ณ ๋๋จธ์ง๋ sass / css-modules๋ก ๊ตฌ์ถํ๋ ๊ฒ๋ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
๋๋ ์ด๋ฌํ ์ฌ๊ณ ๋ฐฉ์์ ์ดํดํ์ง๋ง, ๋ํ ๊ทธ๊ฒ์ ๋ฐ ์์ฐ์ ์ด๋ผ๊ณ ์๊ฐํ๊ณ ํ์ ๊ณผ ์ฐ์ ์ ๋ฆ์ถ๋ ๊ฒ์ ๋ํด ๋น๋ํฉ๋๋ค.
์ ๋ ๋ค ์ง์ํ์ง ์์ต๋๊น? JavaScript๋ก ์์ฑ๋ ์คํ์ผ๊ณผ CSS ๋ชจ๋๋ก ์์ฑ๋ ์คํ์ผ? ์๋ฅผ ๋ค์ด https://github.com/callemall/material-ui/blob/next/src/Button/Button.js ๋ฅผ ์ดํด๋ณด๋ฉด prop ( https://github.com/javivelasco/react-css-themr) ๋์ ๋ค์์ ์ฌ์ฉํ์ญ์์ค.
const classes = this.context.styleManager.render(styleSheet);
๊ทธ๋ ์ง ์๋์?
JSS ๋๋ CSS ์ฌ์ฉ์ ๋ํ ๋ ผ์๊ฐ ๋์ ์ฐพ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค (์์ง?). ๋์๊ฒ ๊ทธ๊ฒ์ ํ์ฌ 50/5์ฒ๋ผ ๋ณด์ ๋๋ค.
SASS์ ๊ด๋ จํ์ฌ react-toolbox๋ ํ์ฌ ์ ์ฒด postCSS ์๋ฃจ์ ์ ์ ํธํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก postCSS (sassLike ํ๋ฌ๊ทธ์ธ ํฌํจ)๊ฐ ๋ ๋์ ์ ํ์ด๊ณ ๋น๋ deps์์ด ๋ ๊ฐ๋ ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ JS, ํนํ React์ ์คํ์ผ๋ง์ ๋ถ๋ช ํ ์ฌ์ ํ ๋น ๋ฅธ ์งํ ์ํ์ ์์ต๋๋ค. ๊ทธ๋์ ๋น์ ์ด ๋ฌด์์ ํ๋ ์ง, ๋๋ ์์ ์ ์๊ฒฌ์ ํผํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
* style prop์ด์๋ ๊ณณ์ * className prop์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ๊ธฐ๊ฐ.
์ ์ฒด ๊ณต๊ฐ : ์ ๋ ํ๋ณตํ ์ํ๋ก๋ํ ์ฌ์ฉ์์ ๋๋ค.
className
์ถ๊ฐ๋ ์ธ๋ผ์ธ ์คํ์ผ ( style
์์ฑ์์)์ด ์ฐ์ ํ๋ฏ๋ก ์ฌ์ ํ !important
ํดํน์ด ํ์ํฉ๋๋ค.
@ligaz ๋ฌผ๋ก ๋น์ ๋ง์ด ๋ง์์. Aphrodite๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํญ๋ชฉ์ !important
๋ฅผ ์ถ๊ฐํ๋ฏ๋ก "๊ด๋ฒ์ํ ์ฌ์ฉ"์ ๋ํ ๋ด ์๊ฐ์ด ์ฌํ๊ฒ ์๊ณก๋์ด์์ ์ ์์ต๋๋ค.
@ligaz @estaub - next
์ด๋ฏธ _without_ ์ฝ๋ฉ style
์ ๊ณตํ์ฌ ๋์ฒด ํ ๊ตฌ์ฑ ์์์ ์์ ์ฌ์ฉ์๋ฅผ className
(๋ณต์กํ ๊ตฌ์ฑ ์์์ ์ฌ๋ฌ ๋ถ๋ถ๊ณผ ์ฌ๋ฌ ํด๋์ค ์ด๋ฆ) .
๊ด๋ฆฌ์๊ฐ next
๋ธ๋์น์ ์ค์ ํ ์คํ์ผ๋ง ํจ๋ฌ๋ค์์ JSS๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ฌ์ฉํ๋ ๊ฒ์ด ์ฆ๊ฒ๊ณ ๊ฐ์ธ ๋๋ ํ
๋ง๋ณ๋ก ์ฌ์ ์ํ๊ธฐ ์ฝ์ต๋๋ค.
์ด ๋ง์ ์ฃฝ์์ต๋๋ค. ๊ทธ๋ง ์น์. @oliviertassinari next
์ ๋ํ ์ง์๋ฌธ์ผ๋ก์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ์ ๊ทธ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋ ํ์ธ์ @rosskevin- ์ด๊ฒ์ด ๋ค์์ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ์๋ฅผ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
์ ๋ ํ์ฌ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ์ํ ํ๋ ์ ์ํฌ๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค. ๋จธํฐ๋ฆฌ์ผ UI๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ๋ค์์ ์ธ๊ธ ํ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ํฉ๋๋ค. ํ ์คํธ ํ๋ก์ ํธ์ ๋ค์ ๋ถ๊ธฐ๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ๋จํ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ๋๋ฐ ์ธ๋ผ์ธ ์คํ์ผ๋ก ๊ฐ๋ ์ฐฌ ๊ด๋ฆฌ์๊ฐ ํ์๋ฉ๋๋ค. ๊ทธ๋์ ์ ๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์๋ ๊ฒ ๊ฐ์์?
์์ธํ ๋ด์ฉ์ ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค!
๊ฐ์ฌ
@giuseppepaul next
๋ ์ฌ์ ์ํ์ด๊ณ ์์ง ์๋ฃ๋์ง ์์๊ธฐ ๋๋ฌธ์ npm์ ๊ฒ์๋์ง ์์์ต๋๋ค. https://github.com/callemall/material-ui.git#next ๋ฅผ ๋ณต์ ํ๊ณ docs/site
๋ฅผ ์คํํ์ฌ ๋ ์ด์ ์ธ๋ผ์ธ ์คํ์ผ์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ํ ํฉ๋ฆฌ์ ์ธ ์์ ๋ฐ๋ชจ๊ฐ ์์ต๋๋ค.
๋ค์ ๋ฒ์ ์ ๋น๊ณต๊ฐ ๋ฒ์ ์ ๊ฒ์ํ๊ณ ์์ผ๋ฉฐ (์ ๋ฐ์ดํธ๋ฅผ ์ ์ด ํ ์ ์๋๋ก) ๊ณง ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ฌ์ฉํ ์์ ์ ๋๋ค.
์ด ๋ง์ ์ฃฝ์์ต๋๋ค. ๊ทธ๋ง ์น์. @oliviertassinari ๋๋ ๋น์ ์ด ๋ค์ ๋ฐฉํฅ์ ์ง์ ๋ก์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ์ ๊ทธ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ ๋ง์ ์์ ํ ์ฃฝ์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์คํ ๋นก๋นกํ ๊ณณ์์ ๐ซ.
๋์ํฉ๋๋ค.์ด ๋ฌธ์ ๋ฅผ ์ข
๋ฃํ๊ฒ ์ต๋๋ค.
๊ทธ ์ด์ผ๊ธฐ์ ๋ํ ๊ทธ์ ๋
ธ๋ ฅ์ ๋ํด @nathanmarks ์๊ฒ ํฐ ๊ฐ์ฌ๋ฅผ
์์ผ๋ก์ ๊ธธ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ # 5718๋ก ๋ชจ์์ต๋๋ค.
์๋
ํ์ธ์,
IconButton
์๋ ๋ฌผ๊ฒฐ ํจ๊ณผ๋ฅผ์ํ CSS3 transition
์์ฑ์ด ์์ต๋๋ค. Card @next ๋ฌธ์์ ๋ณต์กํ ์ํธ ์์ฉ์์ ์์ด์ฝ์ด ๋ฐ์ ๋ ๋ ์ ํ์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ณํ์ transition
๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๋ด ์ฑ์์ ๋์ผํ ์์
์ ์ํํ๋ฉด ํ ์ ํ (๋ฆฌํ ๋๋ ๋ณต๊ท)์ด ๋ค๋ฅธ ์ ํ์ ์ฌ์ ์ํฉ๋๋ค (์์์ ๋ ๊ฐ์ ์์ฑ์ด์์ ์์๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋๊ฐ ๋ค๋ฅธ ํ๋๋ฅผ ์ฌ์ ์ ํจ).
๊ทธ๋ฌ๋ ์๋ธ๋ก ์์ด์ฝ์๋ ๋ ๊ฐ์ transitions
๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ๋์์ต๋๋ค. ์ด์จ๋ IconButton
์ ๊ณตํ๋ ์ ํ๊ณผ ์ฝ๋์ ์ ์ ๋ ์ ํ์ ๋ณํฉํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ป๊ฒ ๋ฌ์ฑํฉ๋๊น?
๋ค๋ฅธ ๊ฒ๋ค์ ์ ์๊ฒ ๋ชจํธํ๋ฉฐ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. theme
์๋ breakpoints
(์ฌ๊ธฐ์์๋ ์ฌ์ฉ๋์ง ์์) transitions
(์ฌ๊ธฐ์์ ์ฌ์ฉ๋จ)์ ๊ฐ์ ๋ง์ ๋ฉ์๋ / ์์ฑ์ด ์์ต๋๋ค. theme
์์ฑ์ ๋ํ ๋ฌธ์๊ฐ ์ด๋ฏธ MuiThemeProvider.createDefaultContext()
๋ฐํํ๋ ๊ฒ์ ๋ํ ๋ฌธ์๊ฐ ์์ต๋๊น? ํนํ ์ฝ๋ ๋ด์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๋ค๋ ์ ์์ ์ ์ฉ ํด ๋ณด์
๋๋ค.
this.context.styleManager.render(styleSheet)
? ๋ญ ?
๋ํ ์ฌ์ฉ jss-theme-reactor
๋๋ ์์ง๋ ๋น๊ต ์ ์ ์ดํดํ์ง ์๋ react-jss
.
@NitroBAY ์ด ์ค๋ ๋๋ ๋๋ฌ์ต๋๋ค. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ฑฐ๋ ๋ฌธ์ ๊ฐ์ ์ ์ํ๋ฉด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด gitter.im์ StackOverflow๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์คํ์ผ๋ง ์๋ฃจ์ ์ด ์์ฑ ๋์์ต๋๊น?