์๋
ํ์ธ์,
Polymer๋ก ์์ฑ๋ ํฐ ํ๋ก์ ํธ๋ฅผ React๋ก ๋ณํํ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ง๋ฉด ํ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์บก์ํ ๋ ์คํ์ผ๋ง์ด ์๋ค๋ ๊ฒ์
๋๋ค.
๋ด ๊ตฌ์ฑ ์์ ์ฌ์ด์ ์บก์ํ ๋ ์คํ์ผ๋ก sass ํ์ผ์ ์บก์ํํ๊ณ ์ถ์ต๋๋ค.
์ ์ฒด ๋ฐ์ ์น ์ฌ์ดํธ์ ๋ฌธ์์๋ ์คํ์ผ์ ๋ํ ์ธ๊ธ์ด ๊ฑฐ์ ์์ต๋๋ค.
๋ํ React ํ๋ฌ๊ทธ์ธ์ chrome devtools์๋ ์คํ์ผ์ ์ ์ธํ ๋ชจ๋ ๊ตฌ์ฑ ์์ ์์ฑ์ด ์์ต๋๋ค. (์ผ๋ฐ DOM์ devtools์๋ ๋ค๋ฆ
๋๋ค).
์ ๋ React๊ฐ ์ ๋ง ๋ง์์ ๋ค์ด์.์ด ๋ฌธ์ ์ ์ด๋ป๊ฒ ์ ๊ทผ ํ ๊ฑด๊ฐ์?
์ธ๋ผ์ธ ์คํ์ผ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ด ๋ฌธ์๋ฅผ ๋ณธ ์ ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. http://facebook.github.io/react/tips/inline-styles.html
์ฐ๋ฆฌ์ ์คํ์ผ์ ๋ธ๋ผ์ฐ์ ์คํ์ผ๊ณผ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์คํ์ผ ์บก์ํ๋ฅผ์ํ Shadow DOM๋งํผ ๊นจ๋ํ ์๋ฃจ์ ์ ์์ง ์์ง๋ง ์น์ Shadow DOM์์ด ์๋ ๋์ ์กด์ฌ ํด ์์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ์คํ์ผ ๊ท์น์ ์ฌ์ฉํ์ฌ ์น ์ฌ์ดํธ๋ฅผ ๋์์ธ ํ ์ ์์ต๋๋ค. :)
ํ ์์๋ ํ ๊ฐ์ง๋ ์คํ์ผ ์ฌ์ค์ ํด๋์ค๋ฅผ ์ ์ํ์ฌ ์คํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ค์ ํ ๋ค์ ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ๊ธฐ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.
๋๋ ๊ธฐ๋ณธ ์คํ์ผ์ด ๋ชจ๋ ํฌํจ ๋ ๊ธฐ๋ณธ ์ธ๋ผ์ธ ์คํ์ผ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ชจ๋ ์์น์ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ ์ค๋ฉฐ ํน์ ์คํ์ผ์ ์ ์ฉํ๋ ค๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ณ Object.assign
์ฌ์ฉํ์ฌ ์ค์ ํ๋ ค๋ ์คํ์ผ์ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋ด 2 ์ผํธ์ ๋๋ค. cc @spicyj
์ถ์ : ์ด๊ฒ์ React์ ๋ฒ๊ทธ ๋ผ๊ธฐ๋ณด๋ค๋ ์ฌ์ฉ๋ฒ ์ง๋ฌธ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๊ณ์ํด์ ๋ฌธ์ ๋ฅผ ๋ซ์ ๊ฒ์ ๋๋ค. ์ด ์ค๋ ๋์์ ๋ํ๋ฅผ ๊ณ์ํ ์ ์์ต๋๋ค (๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ๋ฉด ๋๋ถ๋ถ ๊ฐ๋ฐ ๋ชฉ์ ์ ์ํด ๋ ์ด๋์์ ์ ๊ฑฐ๋ฉ๋๋ค). ์ด์ ๊ฐ์ ์ง๋ฌธ์ ์ด์์ ์ธ ์ฅ์๋ StackOverflow์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์ฑ ์์ ์ด๋ฆ์ผ๋ก ๋ฒ์๊ฐ ์ง์ ๋ ์ ์ญ ์ ์ผ๋ก ๊ณ ์ ํ BEM ํ์์ ํด๋์ค ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
var MyComponent = React.createClass({
render: function() {
return (
<div className="MyComponent">
<button className="MyComponent__button">Hi!</button>
</div>
);
}
});
๊ทธ๋ฐ ๋ค์ CSS์์ ๋จ์ผ ํด๋์ค ์ด๋ฆ์ ์ ํธํ๋ ํ์ ์ ํ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ์ด๋ ์คํ์ผ ๋ถ๋ฆฌ ๋ฐ ๊ตฌ์ฑ ์์ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์คํ์ผ์ ๋ถ๋ฆฌํ์ง ์๊ณ ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑ ํ ์ ์์ต๋๋ค.
์ํธ๋ ํ๋ฅญํ ๋ ธ์ฆ ํด๋ง (์ฌ ์์ )๊ณผ ์ ํฉ์ฑ ๊ฒ์ฌ๊ธฐ๊ฐ์์ด ์คํ์ผ์ด ๋ฒ์ง์ง ์๋๋ก ์๋ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ ๋ค๋ฅธ ํ๋ฅญํ ์ต์ ์ ๋๋ค.
์ด๊ฒ์ ํฅ๋ฏธ๋ก์ด ์๋ฃจ์ ์ฒ๋ผ ๋ณด์ ๋๋ค : https://github.com/Wildhoney/ReactShadow
๋ ๋ค๋ฅธ ์ ์ฌ์ ์๋ฃจ์ ์ http://projects.formidablelabs.com/radium/์ ๋๋ค.
๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ธ๋ผ์ธ ์คํ์ผ์ ์ ํธํ๊ณ ๋๋ฌด ๋ณต์กํด์ง๋ฉด @spicyj๊ฐ ๊ถ์ฅํ๋ BEM๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ๋๋ ๋ํ ๋ด ๊ฒฝํ์์ React์ ์ ์ด์ธ๋ฆฌ๋ SuitCSS๋ฅผ ์ข์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ธ๋ผ์ธ ์คํ์ผ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ด ๋ฌธ์๋ฅผ ๋ณธ ์ ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. http://facebook.github.io/react/tips/inline-styles.html
์ฐ๋ฆฌ์ ์คํ์ผ์ ๋ธ๋ผ์ฐ์ ์คํ์ผ๊ณผ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์คํ์ผ ์บก์ํ๋ฅผ์ํ Shadow DOM๋งํผ ๊นจ๋ํ ์๋ฃจ์ ์ ์์ง ์์ง๋ง ์น์ Shadow DOM์์ด ์๋ ๋์ ์กด์ฌ ํด ์์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ์คํ์ผ ๊ท์น์ ์ฌ์ฉํ์ฌ ์น ์ฌ์ดํธ๋ฅผ ๋์์ธ ํ ์ ์์ต๋๋ค. :)
ํ ์์๋ ํ ๊ฐ์ง๋ ์คํ์ผ ์ฌ์ค์ ํด๋์ค๋ฅผ ์ ์ํ์ฌ ์คํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ค์ ํ ๋ค์ ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ๊ธฐ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.
๋๋ ๊ธฐ๋ณธ ์คํ์ผ์ด ๋ชจ๋ ํฌํจ ๋ ๊ธฐ๋ณธ ์ธ๋ผ์ธ ์คํ์ผ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ชจ๋ ์์น์ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ ์ค๋ฉฐ ํน์ ์คํ์ผ์ ์ ์ฉํ๋ ค๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ณ
Object.assign
์ฌ์ฉํ์ฌ ์ค์ ํ๋ ค๋ ์คํ์ผ์ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.๊ทธ๊ฒ์ ๋ด 2 ์ผํธ์ ๋๋ค. cc @spicyj
์ถ์ : ์ด๊ฒ์ React์ ๋ฒ๊ทธ ๋ผ๊ธฐ๋ณด๋ค๋ ์ฌ์ฉ๋ฒ ์ง๋ฌธ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๊ณ์ํด์ ๋ฌธ์ ๋ฅผ ๋ซ์ ๊ฒ์ ๋๋ค. ์ด ์ค๋ ๋์์ ๋ํ๋ฅผ ๊ณ์ํ ์ ์์ต๋๋ค (๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ๋ฉด ๋๋ถ๋ถ ๊ฐ๋ฐ ๋ชฉ์ ์ ์ํด ๋ ์ด๋์์ ์ ๊ฑฐ๋ฉ๋๋ค). ์ด์ ๊ฐ์ ์ง๋ฌธ์ ์ด์์ ์ธ ์ฅ์๋ StackOverflow์ ๋๋ค.