Material-ui: [Core]๋ณด๋‹ค ์ •๊ตํ•œ ์Šคํƒ€์ผ๋ง ์†”๋ฃจ์…˜์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 04์›” 22์ผ  ยท  100์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mui-org/material-ui

@ 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)์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

  1. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๊นŒ? (์œ„์— ๊ฐ€๋ณ๊ฒŒ ํ„ฐ์น˜)
  2. ์Šคํƒ€์ผ ์‹œํŠธ ๋ฏน์Šค ์ธ์ด์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์‚ฌ์–‘์— ์ž์„ธํžˆ ์„ค๋ช…
  3. lib์—์„œ flexbox ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ๋ ˆ์ด์•„์›ƒ ๋„์šฐ๋ฏธ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ / ๋˜๋Š” ๋ฏน์Šค ์ธ์„ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?
  4. ์ƒˆ๋กœ์šด ์†”๋ฃจ์…˜์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ ค๋ฉด ํ…Œ๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ํ…Œ๋งˆ ๋Š” ์ผ๊ด€๋œ ์Šคํƒ€์ผ๋ง์˜ ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ด์ง€๋งŒ, ๊ธ€๋กœ๋ฒŒ ํ‚ค๋ผ ์ธ / ๊ธ€๊ผด ํฌ๊ธฐ / ๊ฐ„๊ฒฉ / ์—ฌ๋ฐฑ ๋“ฑ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์ผ๋ฐ˜์ ์ธ ๋จธํ‹ฐ๋ฆฌ์–ผ ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚œ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์žฌ๋ฃŒ UI๋ฅผ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ๊ฐ€์ด๋“œ์™€ ์ผ์น˜ํ•˜๋Š” ๋ฏธ๋ฆฌ ์ •์˜ ๋œ ์œ ํ˜•์˜ ์Šคํƒ€์ผ์„ ๋งŒ๋“ค์–ด ์šฐ๋ฆฌ์˜ ์ธ์‡„์ˆ ์˜ ์ผ๊ด€์„ฑ์„ ๊ฐœ์„ ํ•˜๊ณ , ์ œ๋ชฉ ๋“ฑ ๊ธฐ๋ณธ ์ด๋Ÿฌํ•œ ๊ธ€๋กœ๋ฒŒ ํ˜• ์Šคํƒ€์ผ์˜ ๋ณ€์ˆ˜์— ๊ฐ€์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ผ์น˜ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  5. react-look ๋งŒํผ ํฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œ ๋นŒ๋“œ ํฌ๊ธฐ๋กœ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋นŒ๋“œ ํฌ๊ธฐ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ 9kb๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” https://github.com/rofrischmann/inline-style-prefixer ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค ... ๐Ÿ˜„
discussion performance umbrella

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์Šคํƒ€์ผ๋ง ์†”๋ฃจ์…˜์ด ์™„์„ฑ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  100 ๋Œ“๊ธ€

์ถ”๊ฐ€ ์งˆ๋ฌธ :
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 ์ด๋ฏ€๋กœ ํŠน์ • ์†์„ฑ์ด ์ ์šฉ๋œ ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ์กฐ์‚ฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
image

์Šคํƒ€์ผ์ด ์„ ํƒ์ž (ํด๋ž˜์Šค ์ด๋ฆ„)์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฉด ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋ณด๋‹ค ์Šคํƒ€์ผ ๊ตฌ์กฐ๋ฅผ ํ›จ์”ฌ ๋” ๋งŽ์ด ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ์ œ์•ˆ (์ด ์ฃผ์ œ์— ๊ด€ํ•œ)์„ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.

/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์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๊ฒƒ์ด ํ˜„์žฌ ์šฐ๋ฆฌ๋ฅผ ๊ดด๋กญ ํžˆ๊ณ  ์žˆ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค. (์„ฑ๋Šฅ ์˜ํ–ฅ ๋ฌธ์ œ๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•จ)

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ์šฐ๋ ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์ •์  ์Šคํƒ€์ผ์„ ๋„ฃ์„ ์œ„์น˜ (์‰ฌ์›€, CSS ํŒŒ์ผ๋กœ ํ•  ์ˆ˜ ์žˆ์Œ)
  2. ์ž…๋ ฅ์— ๋”ฐ๋ผ ์ผ๋ถ€ ์Šคํƒ€์ผ์„ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• (className ์Šค์œ„์น˜)
  3. ๋™์  ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• (์ธ๋ผ์ธ ์Šคํƒ€์ผ๋กœ ๊ฐ€๋Šฅ)

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์•„ ๋ณด์ด๋ฉฐ ์ฝ”๋“œ ์™ธ๋ถ€์—์žˆ๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ƒํ™ฉ์ด ๋‹ค๋ฅด๋ฉฐ ์œ„์˜ ๋ชจ๋“  ๋ฌธ์ œ์™€ ๋‹ค์Œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ •์  ์Šคํƒ€์ผ์„ ์‚ฌ์šฉ์ž ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  2. ์‰ฝ๊ฒŒ ์ „ํ™˜, ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ…Œ๋งˆ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• (๋‹ค๋ฅธ ํ•˜์œ„ ํŠธ๋ฆฌ ๋‹ค๋ฅธ ํ…Œ๋งˆ)?
  3. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ์ž˜ ๋†€ ์ˆ˜ ์žˆ๋„๋ก ๊ธ€๋กœ๋ฒŒ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  4. ์‚ฌ์šฉ์ž๊ฐ€ ์ธ๋ผ์ธ ๋™์  ์Šคํƒ€์ผ์„ ์–ด๋–ป๊ฒŒ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  5. ๋ณ€์••๊ธฐ! (rtl, ์ ‘๋‘์‚ฌ ๋“ฑ)

์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€์ฃผ์˜ ์‚ฌํ•ญ์œผ๋กœ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋“  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ณต์—ฐ!
  2. @nathanmarks๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๊นŠ๊ฒŒ ์ค‘์ฒฉ ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. somethingInsideToTheLeftButSlightlyMiddleFocusHoverActiveStyle
  3. ์ผ๋ถ€ CSS ๊ธฐ๋Šฅ์˜ ํž˜์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์Šคํƒ€์ผ๋ง ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ์งˆ๋ฌธ์— ๋‹ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ €์˜ ๊ฒธ์†ํ•œ ์˜๊ฒฌ์œผ๋กœ๋Š” CSS์™€ CSS๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ๋ฏธ๋ž˜์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ์Šคํƒ€์ผ์ด ์šฐ๋ฆฌ ์‚ถ์„ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ๋ฐ ๋ชจ๋‘ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์†”์งํžˆ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ œํ•œ ์€ :hover !

์šฐ๋ฆฌ๋Š” ์•ฝ๊ฐ„์˜ ๋””์ž์ธ์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์Šคํƒ€์ผ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฒฝ์šฐ ์ƒํƒœ๋ฅผ ๋ถ„ํ•ดํ•˜์—ฌ ๋” ์ž‘์€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋„ฃ์–ด ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํƒœ ์ธ ์ „๋‹ฌ ๋œ ์†Œํ’ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํƒ€์ผ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
  2. ๊ทธ๋“ค์„ ๋ถ€์ˆด ๋ผ! ์™œ ์šฐ๋ฆฌ๋Š” ์ž‘์€ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ํฌํ•จ ๋œ ListItem ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋ถ„ํ•ดํ•˜๊ณ  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด somethingInsideToTheLeftButSlightlyMiddleFocusHoverActiveStyle ์™€ ๊ฐ™์€ ๊ดด๋ฌผ์„ ์ถ”๊ฐ€ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  3. ์œผ! ์šฐ๋ฆฌ๊ฐ€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ :hover ๋ธŒ๋ผ์šฐ์ € ๋‚˜ ๋ฐ˜์‘์ด ๋ญ”๊ฐ€๋ฅผ ํ•  ๋•Œ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ์‚ด ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ œ ์š”์ ์€ ํ˜„์žฌ์˜ ์Šคํƒ€์ผ๋ง ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฏธ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ์Šคํƒ€์ผ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ํŒจํ„ด์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„ํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ ํ›จ์”ฌ ๋” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. take MeuItem ๊ทธ๊ฒƒ์„ ๊บผ๋‚ด์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ˆœ์ˆ˜ํ•œ ๋ Œ๋”๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๋”ฐ๋ผ์„œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ•ด๊ฒฐํ•˜๋Š” ๋Œ€์‹  ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ฉ์‹œ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์‘๋‹ต ์„ฑ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๊นŒ? ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„ํ•ดํ•˜๋ฉด ์ธ๋ผ์ธ ์Šคํƒ€์ผ์ด ๋” ์ž‘์•„์ง€๊ณ  ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค! ํ•„์š”ํ•œ ๊ฒƒ์€ Object.assign ์— ์ฐธ์—ฌํ•˜๋Š” ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜์—ฌ ์Šคํƒ€์ผ์˜ ์ถœ์ฒ˜๋ฅผ ํ™•์ธํ•˜๋Š” ์ค‘๋‹จ ์ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ทธ๊ฒƒ์€ ์ œ๊ฐ€ ํ† ๋ก ์— ๋งค์šฐ ๊ฐœ๋ฐฉ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฟก ๋นต๋€จ

๋‹น์‹ ์€ ๋ช‡ ๊ฐ€์ง€ ํ›Œ๋ฅญํ•œ ํฌ์ธํŠธ๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ. ์ผ์ข…์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์†”๋ฃจ์…˜์ด ๊ฐ€๋Šฅํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ฐ๋„๋ฅผ ์ทจํ•˜๋”๋ผ๋„ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿ˜†

๋‹ค์Œ ์ฃผ์—์ด ์ž‘์—…์„ ํ•  ์‹œ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๊ณ  ์˜๋ฆฌํ•œ ์•„์ด๋””์–ด๋ฅผ ์ƒ๊ฐํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ณ€ํ™”๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ด๋ฏธ ํ•ด๊ฒฐ ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ณต์—ฐ
  2. ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ (JS ์Šคํƒ€์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํด๋ž˜์Šค๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์—ฌ ์—ฌ๊ธฐ์—์„œ ๋งŽ์€ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค)

์ด๊ฒƒ์— ๋Œ€ํ•ด ๋” ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„ ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๋‘ ๊ฐ€์ง€ ์ ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ์šฐ๋ฆฌ์˜ ์†”๋ฃจ์…˜์— ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ž„์˜์˜ ๋ฉ”๋ชจ-lib ์ „์ฒด์—์„œ ์ธ๋ผ์ธ / jsstyle / ๋ฌด์—‡์ด๋“ ์— ๋Œ€ํ•ด ํŠน์ • ์ฝ”๋“œ ๊ทœ์น™๊ณผ ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•˜๋Š” ์ž๋™ํ™” ๋œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‹น์‹ ์ด 100 % ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@nathanmarks ์ €๋Š” SCSS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— 100 % ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (_ ์ง์žฅ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค _). ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ๊ด€์ ์—์„œ๋Š” ๋ง‰ ๋‹ค๋ฅธ ๊ณจ๋ชฉ ์ž…๋‹ˆ๋‹ค.
React์˜ ์ฃผ์š” ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ํŠน์ˆ˜์„ฑ์„ ์ถ”์ƒํ™” ํ•œ DOM์ž…๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์•„๋Š” ํ•œ React Core Team์˜ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ์œ„ํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋“ค์€ ํ˜„์žฌ์ด ๋ฐฉํ–ฅ์œผ๋กœ

@alitaheri์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‘ ๋‹จ๊ณ„๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‚˜์ค‘์— ๋” ์‰ฝ๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ด๋””์„œ๋‚˜ getStyles ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
    codemod๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ฐ€ ์•Œ์•„.
  • @alitaheri๊ฐ€ ์ œ์•ˆํ•œ๋Œ€๋กœ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

@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 ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋“ค์œผ๋‹ˆ ํ™˜์ƒ์ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํด๋ž˜์Šค ์ด๋ฆ„ ๋ช…๋ช… ๊ทœ์น™์ด ์–ด๋–ป๊ฒŒ ๋ณด์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?
  • ๋ชจ๋“  ํด๋ž˜์Šค ์ด๋ฆ„์— "mui-"๋˜๋Š” ๊ธฐํƒ€ ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ํด๋ž˜์Šค๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์˜ ๋Œ€์‹œ ํ‘œ๊ธฐ๋ฒ•์ž…๋‹ˆ๊นŒ?
  • ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ฃจํŠธ ์š”์†Œ์— ํด๋ž˜์Šค ์ด๋ฆ„์ด ์ ์šฉ๋ฉ๋‹ˆ๊นŒ?

๋ฟก๋ฟก

์ด์ƒ์ ์œผ๋กœ :

์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ ์ ‘๋‘์‚ฌ. ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„์œ„ํ•œ ์ผ์ข…์˜ ๋Œ€์‹œ ํ‘œ๊ธฐ๋ฒ•๊ณผ ์‚ฌ์šฉ์ž ์ง€์ • ํ…Œ๋งˆ 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 ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ธก๋ฉด์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€์  ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ œ๊ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์บ์‹œ ๋œ ์ƒ์„ฑ ๋œ CSS ์‹œํŠธ์— ์˜์กดํ•˜๋ฏ€๋กœ ๋” ๋น ๋ฅธ ๋ฐ˜์‘ ๋ Œ๋”๋ง ๋ฐฉ๋ฒ•.
  • CSS ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋ณด๋‹ค ๋‚ฎ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ DevTools๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•  ์‹œํŠธ๋ฅผ ์‹๋ณ„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ˆœํ™” ๋œ ์Šคํƒ€์ผ ์žฌ์ •์˜.
  • ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง์„ ํ•  ๋•Œ ๋” ๋น ๋ฅธ ์ฒซ ๋ฒˆ์งธ ํŽ˜์ธํŠธ.

    • ์‚ฌ์šฉ์ž๋Š” ์ค‘์š”ํ•œ CSS ์‹œํŠธ๋ฅผ ์ธ๋ผ์ธ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ ๋œ ์‹œํŠธ ๋งŒ ์ธ๋ผ์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๐Ÿ™ˆ ํฐ ๊ธฐ๋‘ฅ์ž…๋‹ˆ๋‹ค ๋‹น์‹ ์ด _Bootstrap_์œผ๋กœ ํ•  ์ˆ˜์—†๋Š” ์ผ์ž…๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœ๋•์…˜์—์„œ ํด๋ž˜์Šค ์ด๋ฆ„ ํ‚ค๋ฅผ uglify ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • _scss-loader_ ๋˜๋Š” _Webpack_๊ณผ ๊ฐ™์€ ๋นŒ๋“œ ์ฒด์ธ ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ์—ฌ์ž / ๊ด€๋ฆฌ์ž ๊ด€์  ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ œ๊ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋” ์ด์ƒ CSS ๋ฆฐํ„ฐ ์—†์Œ
  • ๋” ์ด์ƒ ์ „์ฒ˜๋ฆฌ CSS๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์šธ CSS ๊ตฌ๋ฌธ ์—†์Œ
  • ๊ตฌ์„ฑ ์š”์†Œ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๋Š” ํ›จ์”ฌ ๋” ๊ฐ•๋ ฅํ•œ ์–ธ์–ด : JavaScript
  • ์Šคํƒ€์ผ ์—”์ง„์„ ์ถ”์ƒํ™” ํ•  ๊ฐ€๋Šฅ์„ฑ์„์—ฌ์‹ญ์‹œ์˜ค. ์˜ˆ : react-with-styles ์‚ฌ์šฉ

์ด ์ €์žฅ์†Œ๊ฐ€ ์•ŒํŒŒ ๋‹จ๊ณ„ ์•„์ด๋””์–ด๋ฅผ ์ฑ„ํƒํ•˜๋ ค๋Š” ์ด์œ 

์•ŒํŒŒ ๋‹จ๊ณ„ ์•„์ด๋””์–ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š”์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ ์œ ์ผํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ : 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์™€๋Š” ๋ฐ˜๋Œ€๋กœ ์Šคํƒ€์ผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์— ๊ฐ์‚ฌ ๋“œ๋ฆฌ๋ฉฐ ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์  ํ…Œ๋งˆ๋ฅผ ์„ ํƒํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Imgur

์‚ฌ์šฉ์ž๊ฐ€ ๋ฏธ๋ฆฌ ๊ฒฐ์ •ํ•  ์ˆ˜์—†๋Š” ์ƒ‰์ƒ ์Œ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ๋งˆ ๊ตฌ์„ฑํ‘œ๋Š” ๋งค์šฐ ๋™์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์™€, ํ…Œ๋งˆ ๋ณ€๊ฒฝ์€ ๋ผ์ด๋ธŒ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. b / c ๋ชจ๋“  ์Šคํƒ€์ผ์€ ์ธ๋ผ์ธ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ํ•ด์•ผ ํ•  ์ผ์€ ๊ธฐ๋ณธ / ์•…์„ผํŠธ ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ฐ˜์‘ ๋„๊ตฌ ์ƒ์ž ๋“ฑ์—์„œ. al., ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@jrop ์˜ˆ,์ด ๋งค์šฐ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋™์  JSS๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์ค‘์š”ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์•„๋‹Œ ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ์žฌ๋ฃŒ UI๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๋Š” ํ˜„์žฌ ์Šคํ† ๋ฆฌ (UI ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ๋งํ•˜์ง€ ์•Š์Œ)๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋™์ž‘ ๋ถ€๋ถ„์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์žฌ์งˆ UI ๋ชจ์–‘์„ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๊ณ ๋„๋กœ ์‹œ๊ฐ์ ์ด๊ณ  ๋””์ž์ธ ๋œ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@DominikGuzei jss๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ next ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค์—์„œ ๋ณผ ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด _ ์•„๋‹™๋‹ˆ๋‹ค _.

์—ฌ๋Ÿฌ๋ถ„, ์—ฌ๊ธฐ์„œ ์ฃฝ์€ ๋ง์„ ์น˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. next ๋ถ„๊ธฐ๋Š” ํ…Œ๋งˆ์™€ ํ•จ๊ป˜ ๋‹ค๋ฅธ (ํ›จ์”ฌ ๊ฐœ์„  ๋œ) ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ–ˆ์œผ๋ฉฐ ์žฌ์ •์˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด๊ฐ€ ์š”์ฒญํ•œ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ next ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด HOC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ž์‹ ์˜ ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@nathanmarks ,์ด ๊ฒฐ์ •์ด ๋‚ด๋ ค ์กŒ๊ธฐ ๋•Œ๋ฌธ์— (๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘), ์š”์•ฝ์„ ์ž‘์„ฑํ•˜๊ณ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  ์ž ๊ทธ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ์™€ ์ฒ ํ•™ (ํ•ต์‹ฌ ๊ด€๋ฆฌ์ž๊ฐ€ ์ž‘์„ฑํ•œ)์— ๋Œ€ํ•œ Wiki ํŽ˜์ด์ง€๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ์Šคํƒ€์ผ์ด ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๊ทธํ† ๋ก ๊นŠ์ด ๋ฟŒ๋ฆฌ ๋ฐ•ํ˜€์žˆ๋Š” ์ด์œ ๋ฅผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์–ธ๊ธ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@fgarcia ์ด๋ฒˆ ์ฃผ ์ดˆ ํŒŒ๋ฆฌ์—์„œ ์—ด๋ฆฐ ์ง€์—ญ ํ–‰์‚ฌ์—์„œ Material-UI๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์Šคํƒ€์ผ๋ง ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ง„ํ™” ์— ๊ด€ํ•œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šฌ๋ผ์ด๋“œ์™€ _notes_ : ๋” ๋‚˜์€ ์Šคํƒ€์ผ์„ ํ–ฅํ•œ ์—ฌ์ •์„ ๋ณด๋Š” ๋ฐ ๊ด€์‹ฌ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋„์ „, ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ์ฑ…์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

๋™์  ํ…Œ๋งˆ๋ฅผ ์„ ํƒํ•˜๋Š” ์‚ฌ์šฉ์ž

CSS-Modules์˜ ์ •์  ์Šคํƒ€์ผ ์ƒ์„ฑ ์ธก๋ฉด์€ ์ƒ๋‹นํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
๋Ÿฐํƒ€์ž„์— ์Šคํƒ€์ผ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ๋น„์šฉ ํšจ์œจ์ ์ด์ง€ ์•Š์ง€๋งŒ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Šคํƒ€์ผ ๊ตฌํ˜„์— ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ : CircularProgress ์—๋Š” CSS ํ‚ค ํ”„๋ ˆ์ž„ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•์— ์—ฐ๊ฒฐ๋œ ๊ณ ์ • thickness ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์  ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ’์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‘๊ป˜ ์†์„ฑ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โš ๏ธ ํ•™๋Œ€ ๋‹นํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • ๋Œ€๊ทœ๋ชจ ์•ฑ์—์„œ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์— ํ•„์š”ํ•œ ์Šคํƒ€์ผ ๋งŒ ์‚ฝ์ž… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์— ํ•„์š”ํ•œ ์ž‘์—…๋Ÿ‰์„ ์ค„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒํ˜ธ ์ž‘์šฉ ํ›„ ์ฒ˜์Œ ํŽ˜์ธํŠธํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SSR๋กœ ์ค‘์š”ํ•œ CSS๋ฅผ ์ธ๋ผ์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋™์  ํ…Œ๋งˆ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•„์š”ํ•œ ๋ชจ๋“  ์ƒ‰์ƒ ๋ณ€ํ˜•์œผ๋กœ ๋ฒ„ํŠผ์˜ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

@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๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰