React ๋?
Facebook ์์ ์ฃผ๋ํ์ฌ ๊ฐ๋ฐํ์ฌ UI๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ตฌ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ JS ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
React ์์ฒด๋ก๋ Framework ๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ ๊ธฐ์ค์ธ Routing, ์ํ๊ด๋ฆฌ ๊ธฐ๋ณธ ์ ๊ณต์ ์ถฉ์กฑํ์ง ๋ชปํด์ '๋ผ์ด๋ธ๋ฌ๋ฆฌ'์ด์ง๋ง, React ์ํ๊ณ๋ก์๋ Framework.
React ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๊ธฐ์กด: ํน์ DOM ์ ์ ํํ ๋ค, ํด๋น DOM์ ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด์ ๋ํ change ๊ฐ ์ผ์ด๋๋๋ก ์ค์ ํ๋ ๋ฐฉ์.
- ์ ์ ์์ ์ํธ์์ฉ์ด ์์ฃผ ์ผ์ด๋๋ ๊ฒฝ์ฐ ์ด์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ๋์ ์ผ๋ก UI์ ํํํด์ผ ํ๋ค๋ฉด ๊ทธ๋งํผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ง๊ณ ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง.
React ํน์ง
1. ๊ฐ์ DOM
๊ธฐ์กด์ ๊ฒฝ์ฐ ํ๋์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ด๋ ํ๋ฉด ์ ์ฒด๊ฐ ๋ฆฌ๋ ๋๋ง ๋์ด์ ์ ์ฒด ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ ธ์ผ ํ๋ ๊ตฌ์กฐ์๋๋ฐ
๊ฐ์ DOM์ ์ ์ฉํจ์ผ๋ก์จ ๋ฐ๋๋ ๋ถ๋ถ ์ปดํฌ๋ํธ๋ง ๋ฆฌ๋ ๋ํ์ฌ ํ๋ฉด์ ๊ฐฑ์ ํ๋ค.
2. ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
์ฌ์ฉ์ UI์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๊ฐ์ํ๋ Watcher ์ Javascript ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ฐ์ํ๋ Watcher๊ฐ UI์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋๊ธฐํ ์์ผ์ฃผ๋ ๋ฐฉ์.
- ์๋ ๋๊ธฐํ๋ ์ข์ผ๋, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๊ฒ ๋๋ฉด ์ด ๋ฐ์ดํฐ์ ๋๊ธฐํ๋ฅผ ์ํ ์ ๋ง์ watcher๊ฐ ์์ฑ๋๋ฏ๋ก, ๋ฐ๋๋ก ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ ...
๊ทธ๋์ react ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ฑํ.
์ฌ์ฉ์๊ฐ UI๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ๋๋, ์ด๋ฒคํธ๋ฅผ ํตํด ๊ฐฑ์ ์ ํด์ผํจ.
- ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ฐ์ง๋ ์ฑ๋ฅ์ ์ธ ์ด์๋ฅผ ํด๊ฒฐํ๊ณ ๋ ํ์คํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํ ์ ์๊ฒ ํด์ค.
3. JSX
JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ์ HTML์ ๋์์ ์ฌ์ฉํ๋ฉฐ, HTML์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์๋ค์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ์ผ์ข ์ ํ ํ๋ฆฟ ์ธ์ด
const App = ()=> {
const hello = 'Hello World!';
return <div>{hello}</div>
}
4. ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
- ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ : ์ด๋ป๊ฒ(how)์ ์ง์คํ๋ ๊ฒ / ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ : ๋ฌด์(What)์ ์ง์คํ๋ ๊ฒ
- ์์
* ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ
const double = (arr) => {
let results = [];
for (let i=0;i<arr.length;i++){
results.push(arr[i]*2);
}
return results;
}
* ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
const double = (arr) => {
return arr.map((ele) => (ele)*2);
}
5. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ
- ์์
const Title = () => {
return <h1>Hello world</h1>;
}
const Button = () => {
return <button>button</button>;
}
const App = () => {
return (
<div>
<Title/>
<Button/>
</div>
);
};
React ์ ์ ์จ
React ์ฅ๋จ์
์ฅ์
* Controller, Directive, Templete, Model, View ์ฒ๋ผ ๋ก์ง์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์๋, Component ํ๋๋ก ๊ด๋ฆฌ๋ฅผ ํจ
* ์ฑ๋ฅ์ด ๋ฐ์ด๋ garbage collector, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ง์
* UI ์์ ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ์ข์ผ๋ฉฐ, ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์
* ๋ค๋ฅธ Framework ๋ Library ์ ๋ณํํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ. ์ด๋ฏธ ๊ฐ๋ฐ ์๋ฃ ๋ ํ๋ก์ ํธ์๋ ์ ์ ํ๊ฒ ๋ น์ผ ์ ์๋ ํ์ฅ์ฑ๋ ํฌํจ๋จ.
๋จ์
* IE8 ์ดํ ๋ฒ์ ์ ์ง์ํ์ง ์์
* View ์ด์ธ์ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํด์ผ ํ๊ธฐ์ Javascript ๋ฐฐ๊ฒฝ์ง์์ด ํ์ ์ ํ.
* ๋ก๋ฉ์๊ฐ์ด ๊ธด ํธ.
* ์น์ ๊ถ๊ทน์ ์ธ ์งํฅ์ ๊ณผ๋ ๋ค์ ๋๋จ์ด์ ธ ์์
- ์น์ ํต์ฌ : ๋ชจ๋ ๊ฒ์ streaming ํ๋ฉฐ, ํ์ด์ง๋ค์ HTML ํ๊ทธ๋ค์ ๋ดํฌํ๊ณ ๊ฐ๋ฒผ์ด response๋ง ๋ธ๋ผ์ฐ์งํจ.
- React : ์ฌ์ดํธ์ ํ์ํ JS๋ฅผ ์ฒ์์๋ ๊ณต๋ฐฑ ํ์ด์ง๋ก ๋์ฐ๊ณ , ์ดํ ๋ค์ด๋ก๋ ํ๋ค. ํ๋ฒ ๋ค์ด๋ก๋ ํ ์ดํ์๋ ๋ค์ ๋ฆฌ์์ค๋ฅผ ๋ค์ดํ์ง ์์๋ ๋์ง๋ง, ์ฒ์ ๋ณด์ด๋ ๊ฒ์ด ์๋ค๋ ๊ฒ์ด streaming ๊ณผ์ ์ฐจ์ด.