Facebook์ด ๋ง๋ React๋ ํ๋ก ํธ์๋ ๋ทฐ ํ๋ ์์ํฌ๋ก ์ถ๋ฐํด React-native (๋ชจ๋ฐ์ผ ์ฑ ํ๋ ์์ํฌ), ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง, React VR ๋ฑ ์์ญ์ ๋ํ๊ฐ๊ณ ์์ต๋๋ค.
์ง๊ธ ์ฐ๋ฆฌ๊ฐ ์ฐ๊ณ ์๋ ์ด steemit๋ ์ด React๋ก ๊ฐ๋ฐ๋์ด ์์ต๋๋ค.
ํ์ง๋ง ๋น์ฐํ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ถ๋ถ์ ํ๋ก ํธ์๋๋ผ๊ณ ํ ์ ์์ต๋๋ค.
React๋ ๊ธฐ๋ณธ์ ์ผ๋ก WebComponent ๊ฐ๋ ์ ๊ณ์นํด์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ ๋งค๋ฒ ์๋ก์ด ์ปดํฌ๋ํธ ๋ฐ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ ํ ํ์์์์ผ๋ก์จ ๋ณด๋ค ๊น๋ํ ์ฝ๋๋ฅผ ์ ์งํ๋๋ฐ ๋์์ ์ค๋๋ค.
๋ํ Single Page App ๊ฐ๋ฐ ์ ์์ฃผ ์
๋ฐ์ดํธ ๋๋ UI์ ์ฃผ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ธ DOM update๋ฅผ ์ต์ํํจ์ผ๋ก์จ ํ ํ๋ ์์ํฌ ๋ณด๋ค ์๋์ ์ผ๋ก ์ฐ์ํ ๋ ๋๋ง ํผํฌ๋จผ์ค๋ฅผ ๋
๋๋ค.
(Vue 2.0 ๋ฑ์ ์ต์ ํ๋ ์์ํฌ์ ๊ฒฝ์ฐ, ๋น์ทํ๊ฑฐ๋ ๊ทผ์ํ๊ฒ ์ฑ๋ฅ์ ์์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ธฐ ํฉ๋๋ค. ๋ฒค์น๋งํฌ ๋ณด๊ธฐ)
React๊ฐ UI๋ณํ๋ฅผ ์ข ๋ ๋์ ์ฑ๋ฅ์ ๋ผ ์ ์๋ ์ด์ ๋ ์ง์ DOM์ ๋งค๋ฒ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ชจ๋ DOM์ ํธ๋ฆฌ ํํ๋ก ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ณ์ ์ถ์ ํ๊ณ ์๋ค๊ฐ ์ ํธ๋ฆฌ๊ฐ ๋ณํ ๋ถ๋ถ๋ง ์๋ก ๊ฐฑ์ ํด์ค์ผ๋ก์จ ์ต์ํ์ DOM update๋ฅผ ํตํด์ ์ฑ๋ฅ์ ์ต์ ํํ์์ต๋๋ค.
class HelloMessage extends React.Component {
render() {
return <div>Hello {this.props.name}</div>;
}
}
ReactDOM.render(<HelloMessage name="Jane" />, mountNode);
์ ์ฝ๋์์๋ HelloMessage๋ผ๋ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ์๊ณ name property์ ๋๊ฒจ์ฃผ๋ ๋ฌธ์์ด์ด ๊ฒฐ๊ตญ <div>Hello name</div>์ ์ต์ข
๊ฒฐ๊ณผ๋ฌผ๋ก ๋ณด์ฌ์ค๋๋ค.
JavaScript๋ฅผ ์ข ํด๋ณด์ ๋ถ์ด๋ผ๋ฉด ์ข ์ด์ํ๊ฒ ๋๊ปด์ง์์ฃ ?
JavaScript์์์ ํ๊ทธ๋ฅผ ๋ฐ๋ก ์ฐ๋ค๋ ๋ง์ธ๋ค
Babel.js ๋ผ๋ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ ์ต์ ES6/ES7/ES2015 ๋ฌธ๋ฒ๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ JavaScript์์์ ํ๊ทธ ๋ฌธ๋ฒ์ ์ธ ์ ์๋ JSX๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ค ์ ์ฝ๋๋ ์๋ ์ฒ๋ผ ์ต์ข ์ ์ผ๋ก ์ปดํ์ผ ๋ฉ๋๋ค.
class HelloMessage extends React.Component {
render() {
return React.createElement(
"div",
null,
"Hello ",
this.props.name
);
}
}
ReactDOM.render(React.createElement(HelloMessage, { name: "Jane" }), mountNode);
"๋๋ JSX ๊ฐ์ ๊ดด๋ฌผ์ ์ ๋ง ๊ทนํ์ด๋ค", "CoffeeScript, TypeScript, Babel ๋ฑ transpiler๋ ์
์ด๋ค" ๋ผ๊ณ ์๊ฐ๋์๋ ๋ถ๋ค์ React.createElement๋ฅผ ์ด์ฉํ์๋ฉด ๋ฉ๋๋ค.
์ ๋ ์ฒ์์๋ ์ฌ์ค ์์ฒญ๋ ๊ฑฐ๋ถ๊ฐ์ ๋๊ผ๋๋ฐ ์คํ๋ ค JSX๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ ๊น๋ํ ์ฝ๋๊ฐ ์ ์ง ๋๋๊ฑธ ๋ณด๋ฉด์ ๋ฐ์๋ค์ด๊ธฐ๋ก ํ 1์ธ์
๋๋ค ใ
ใ
Nested element์ผ ๊ฒฝ์ฐ์ React.createElement๊ฐ ํจ์ฌ ๊ทนํ
React๋ ์ฑ๋ฅ ๋ง๊ณ ๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ํ๋ก ํธ์๋ ์ํ๊ณ์๋ ๋ง์ ๋ณํ๋ฅผ ์ฃผ์์ต๋๋ค.
React์์ฒด ๋ง์ผ๋ก๋ ๋จ์ View ์์ผ๋ก Angular, Ember, Backbone๊ณผ ๊ฐ์ MVC, MVVM ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ ์๊ธฐ ๋๋ฌธ์
์ฃผ๋ก Flux ๊ณ์ด์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ Flux๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Redux ์ ๋๋ค.
์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค๊ฑฐ๋ ๋ถ๋ชจ-์์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ์ปดํฌ๋ํธ๋ค์ ๊ฒฝ์ฐ property๋ ๋ถ๋ชจ -> ์์์ผ๋ก ๋ฐ์ ์ ๋ฌ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ๊ฐ ๊น๋ค๋กญ๊ณ ๋จธ๋ฆฌ๊ฐ ์ํ๊ฒ ๋ฉ๋๋ค.
Redux ํ๋ ์์ํฌ๋ฅผ React์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ ์ฒด application์ ์ํ ํธ๋ฆฌ๋ฅผ globalํ๊ฒ ๊ฐ์ง๊ณ ์๊ณ ํ์ํ ๋ถ๋ถ์ ํธ๋ฆฌ๋ง์ ํน์ ์ปดํฌ๋ํธ์ property๋ก์จ ์ ์ฉํจ์ผ๋ก์จ ๋ฐ๋ก๋ฐ๋ก component ๋ณ๋ก ์จ๊ฐ ์ก์ ์ด๋ property ๊ฐ์ ๋๊ฒจ์ฃผ๋ ๋ฑ์ ์์ ์ ํ์ง ์์๋ ์ ์ฒด ์ํ ํธ๋ฆฌ๋ง์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ์์ฐ์ค๋ฝ๊ฒ UI ๋ณ๊ฒฝ์ ํ ์ ์์ต๋๋ค.
๋ค์ ๋งํ์๋ฉด, Redux์์๋ ์ด๋ฐ ๋ณ๊ฒฝ์ action์ reducer๋ก ๋ณด๋ด๊ณ (dispatch), reducer์์๋ action์ ์๋ ๋ฐ์ดํฐ๋ก ์ ์ฒด ์ํ ํธ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ ์์ฐ์ค๋ฝ๊ฒ ์ ์ฒด ์ํ ํธ๋ฆฌ ๋ณํ์ ํจ๊ป ๊ฐ์ด React ์ปดํฌ๋ํธ์ UI๊ฐ ๋ณํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Redux๊ฐ ๋์ด ์๋๋๋ค... Redux์ ํจ๊ป ์ฐ๋ redux-thunk (๋น๋๊ธฐ ์ก์ ), redux-logger (๋ก๊น ) ๋ฑ์ ๋ฏธ๋ค์จ์ด๋ ์์ต๋๋ค.
Webpack์ผ๋ก ์๋ฆ๋ต๊ฒ ํ๋์ ๋ฒ๋ค๋ก ๋ง๋ค์ด ์ค์๋ ์๊ณ
webpack-hot-module-replacement๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐ ์ค์๋ ๋ธ๋ผ์ฐ์ ์๋ก๊ณ ์นจ์ ํ์ง ์์๋ ๋ณ๊ฒฝํ ์ฝ๋๊ฐ ๋ฐ๋ก๋ฐ๋ก ์ฃผ์ ๋๋ ๋ฑ ์ ์ธ๊ณ๋ฅผ ๋ง์ด ํ์์์ผฐ์ต๋๋ค.
React ์ํ๊ณ๋ฅผ ๋ณด๊ณ ์์๋ฉด, ๋ญ๊ฐ ์ฐธ ๋ง๊ณ ๋ณต์กํด๋ณด์ด์ง๋ง
๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์กด์ฌ์ ์ด์ ๊ฐ ์๊ณ ๊ตณ์ด ๋ค ์ฌ์ฉํ์ง๋ ์๋๋ผ๋ ํ์ํ ๊ฒ์ ์ ๊ณจ๋ผ์ ์ฌ์ฉํ๋ค๋ฉด ๋ ๋์ ์์ฐ์ฑ์ ๊ฐ์ง๊ณ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ธํ
์ด ํฌ์ธ๊ฑด ํจ์
Facebook ์ด ์ง์ ๊ด๋ฆฌํ๋ Create React App์ ์ด์ฉํด์ ์์ํด๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.