์ถ์ฒ https://github.com/OpenJSX/logo
๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ๋ฆฌ์กํธ ์์ ํ์ผ๋ค์ด ๋ชจ์ฌ์๋
ํ๋ก์ ํธ ํด๋
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์คํ์ํค๋ ๋ฐ์ ํ์ํ ์ฌ๋ฌ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์ฝ๋๋ชจ์)๊ฐ ๋ค์ด์๋ ํด๋
๋ง์ฝ node_modules ๊ฐ ์์ผ๋ฉด ์ปดํจํฐ๊ฐ ์ฝ๋ ํด์ ๋ชปํจ
์ด๋ฏธ์ง, ์์ ๋ฑ ๋ฆฌ์์ค๋ฅผ ๋ชจ์๋๋ ํด๋
favicon.ico
ํญ๋ถ๋ถ์ ํํ๋๋ ์์ด์ฝ
index.html
body ํ๊ทธ ์์ชฝ์ ์ค๋ก์ง
id๊ฐ root์ธ ๋น์ด์๋ div ํ๋๋ง ๊ฐ๊ณ ์๋ html ํ์ผ
htmlํ์ผ์ index.html ํ์ผ ํ๋๋ง ์์ด์ผ ํ๋ค
<div id="root"></div>
์์ชฝ์ ๋ด์ฉ๋ฌผ์ ๋๊ฐ ๋ฃ์ด์ฃผ๋ ๊ฒ์ธ๊ฐ? index.js๊ฐ
index.js
index.html์ root div์ ์์์ผ๋ก ์์๋ฅผ ์ถ๊ฐํด์ค๋ค
App.test.js
App.js์ ๋ง๋ค์ด๋์ ์ฝ๋๊ฐ ๋ฒ๊ทธ๊ฐ ์๋์ง ํ์ธํ๋ ํ์ผ
์ด๊ธฐ๋จ๊ณ์๋ ํ์์์ผ๋ ์ญ์ (ํ
์คํธํ ๋ ๋ค์๋ง๋ค๋ฉด ๋จ)
๊นํ๋ธ์ ์ฌ๋ผ๊ฐ๋ฉด ์๋๋ ํ์ผ์ด๋ ํด๋๋ฅผ ๋ช
์ํ๋ ํ์ผ,
.gitignoreํ์ผ์์๋ ํด๋๋ ํ์ผ์ ๊นํ๋ธ์ ์ฌ๋ผ๊ฐ์ง ์๋๋ค
์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ์ ๊ธ(์ ์ง)ํ๋ ํ์ผ
์์ XX
๋ฆฌ์กํธ ํ๋ก์ ํธ ์์ฒด์ ์ค์ ํ์ผ
์ด ํ๋ก์ ํธ์ ๋ฒ์ , ๋ง๋ ์ฌ๋์ ๋ํ ์ ๋ณด,
์ด ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ๋ฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ... ๋ค์ํ ์ ๋ณด๋ค์ด ๋ค์ด์๋ค
์ด ํ๋ก์ ํธ์ ๋ํ ์ค๋ช
html ํ์ผ์ด ์ค๋ก์ง ํ ๊ฐ๋ง ์กด์ฌํ๋ค
๋ฆฌ์กํธ๋ก ๋ง๋ ์น์ฌ์ดํธ๋ ํ์ด์ง๊ฐ ํ๋๋ง ์กด์ฌํ๋ค
(Facebook, Instagram, ...)
SPA(Single Page Application)
SPA๋ ํ๊ฐ์ ํ์ด์ง๋ก๋ง ๋ง๋ค์ด์ ธ์๋ ์น ํน์ ์ฑ์ ์๋ฏธํ๋ค
MPA๋ ์ฌ๋ฌ๊ฐ์ ํ์ด์ง(htmlํ์ผ์ด ์ฌ๋ฌ๊ฐ)๋ก ๋ง๋ค์ด์ ธ์๋ ์น ํน์ ์ฑ์ ์๋ฏธํ๋ค
๊ธฐ์กด html css ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฉํ์ฌ ๋ง๋ ํ์ด์ง
๋ก๊ทธ์ธ.html --> ๋ก๊ทธ์ธ์๋ํ ๊ทธ๋ฆผ ๋ํ์ง์ ๊ทธ๋ ค๋ฃ๊ธฐ
ํ์๊ฐ์
.html --> ํ์๊ฐ์
์ ๋ํ ๊ทธ๋ฆผ์ ๋ํ์ง์ ๊ทธ๋ ค๋ฃ๊ธฐ
๋ฉ์ธํ๋ฉด.html --> ๋ฉ์ธํ๋ฉด ๊ทธ๋ฆผ์ ๋ํ์ง์ ๊ทธ๋ ค๋ฃ๊ธฐ
....
์ฃผ์
www.naver.com --> ๋ฉ์ธํ๋ฉด ๊ทธ๋ฆผ๋ณด์ฌ์ฃผ๊ธฐ
www.naver.com/login --> ๋ก๊ทธ์ธ์๋ํ ๊ทธ๋ฆผ๋ณด์ฌ์ฃผ๊ธฐ
www.naver.com/join --> ๋ฉ์ธํ๋ฉด ๊ทธ๋ฆผ๋ณด์ฌ์ฃผ๊ธฐ
์๋๋ ์ด๋ ๊ฒ ๊ฐ์ฒด ์ฐพ๊ธฐ ๋ง๋
ธ๋์ ํ์๋คใ
ใ
๋ํ์ง(ํ์ดํธ๋ณด๋) ํ๊ฐ
๋ฉ์ธํ์ด์ง ๋ณด์ฌ์ค --> ํ์ดํธ๋ณด๋์ ๋ฉ์ธํ์ด์ง ๊ทธ๋ ค์ ๋ณด์ฌ์ฃผ๊ธฐ
๋ดํ๋กํํ์ด์ง ๋ณด์ฌ์ค --> ํ์ดํธ๋ณด๋์ ๊ทธ๋ ค์ ธ์๋ ๋ฉ์ธํ์ด์ง๋ฅผ ์ง์ฐ๊ณ , ํ๋กํํ์ด์ง๋ฅผ ๊ทธ๋ ค์ ๋ณด์ฌ์ฃผ๊ธฐ
react ํ๋ก์ ํธ์ ์๋ index.html์์
root div๋ฅผ ์ฐพ์์จ ๋ค์์ ๊ทธ ์์๋ค๊ฐ
๊ทธ๋ ค์ฃผ๋ ํ์๋ฅผ ํ๋ ํ์ผ : index.js
์๋๋ฅผ ํฅ์์ํค๋ ค๋ฉด
๋ฐ๋๋ ๋ถ๋ถ๋ง ์ง์ ๋ค๊ฐ ๊ทธ๋ ค์ฃผ๋ฉด ๋์ง ์์?
๋ฌผ๋ฆฌ์ DOM๊ณผ ๋์ผํ ๊ฐ์์ DOM์ ๋ง๋ค๊ณ ,
๋ณํด์ผ ํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด
๋ณํ๊ธฐ ์ ์ ๊ฐ์ DOM ๊ตฌ์กฐ์
๋ณํ ํ์ ๊ฐ์ DOM ๊ตฌ์กฐ๋ฅผ ๋น๊ตํ์ฌ
๋ณํ ๋ถ๋ถ๋ง
๋ฌผ๋ฆฌ์ DOM์ ๋ฐ์ํ๋๋ก ์ฝ๋๋ฅผ ์ง๋์์
์๋๋ฅผ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค
index.js์์์๋
ReactDOM.createRoot(๋ฌผ๋ฆฌ์ ์ธDOMํ๊ทธ)
--> ๋ฌผ๋ฆฌ์ DOMํ๊ทธ๋ฅผ ๋ฃจํธ(๋ฟ๋ฆฌ)๋ก ํ๋
๊ฐ์์ DOM ํ๊ทธ๋ฅผ ๋ง๋ค์ด์ค
render(ํ๊ทธ)
--> ๊ฐ์ DOM ํ๊ทธ ์์ ์์์ผ๋ก ํน์ ํ๊ทธ๋ฅผ ์ถ๊ฐํด์ค
*17๋ฒ์ ์ render ํจ์ ์์ฐ๊ณ hydrate ํจ์๋ฅผ ์ด๋ค(๋
ผ๋ฆฌ๋ ๋๊ฐ์ง๋ง...)
๊ทธ๋์ ํ์ฌ์์๋ 16๋ฒ์ ์ด๋ 18๋ฒ์ ์ ์ด๋ค
๋ชจ๋ ํ๊ทธ๋ค์ ๊ฐ์ฒด์ด๋ค
Markup Language : <>๋ก ์ด๋ฃจ์ด์ง ์ธ์ด
์ ๋ณด์ ๋ฌ
์ฌ๋์ด์๋๋ฐ, ์ด๋ฆ์ April์ด๊ณ
๋์ด๋ 3์ด์ด๊ณ ํ๊ต๋ ๋ค๋์ฅ์ด๋ฆฐ์ด์ง
์ฌ๋์ด์๋๋ฐ, ์ด๋ฆ์ Kyle์ด๊ณ
๋์ด๋ 7์ด์ด๊ณ ํ๊ต๋ ๋ค๋์ฅ์ด๋ฑํ๊ต
์ฌ๋์ด์๋๋ฐ, ์ด๋ฆ์ Jay์ด๊ณ
๋์ด๋ 4์ด์ด๊ณ ํ๊ต๋ ๋ค๋์ฅ์ ์น์
๊ณผ๊ฑฐ
16์ฌ๋April15๋ค๋์ฅ์ด๋ฆฐ์ด์ง13์ฌ๋Kyle๋ค๋์ฅ์ด๋ฑํ๊ต
์์ง๋ ๊ธ์ต๊ถ์์๋ ์ด๋ ๊ฒ ์ด๋ค...์๋๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ใ
16์๋ฆฌ๊ฐ ํ๋์ ์ ๋ณด ๋ฉ์ด๋ฆฌ์ผ
์ ๋ณด๋ฅผ ๋ถ๋ฆฌ๋ฅผ ์์ผ์ผํ๋๋ฐ ์ด๋ป๊ฒ ์๋ฅด์ง?
spec ๋ฌธ์ - ์ด๋ ๊ฒ ๋ถ๋ฆฌ๋ฅผ ํด๋์ ๋ฌธ์
meta ์ ๋ณด(๊ฐ์ ๋ํ ์ค๋ช
์ ํ์ฌ๋ง๋ค ๋ค๋ฅด๋ค)
xml
<์ฌ๋ ์ด๋ฆ="April" ๋์ด="3" ํ๊ต="๋ค๋์ฅ์ด๋ฆฐ์ด์ง">
<์ฌ๋ ์ด๋ฆ="Kyle" ๋์ด="7" ํ๊ต="๋ค๋์ฅ์ด๋ฑํ๊ต">
<์ฌ๋ ์ด๋ฆ="Jay" ๋์ด="4" ํ๊ต="๋ค๋์ฅ์ ์น์">
jsx ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํํ XML
์๋ฐ์คํฌ๋ฆฝํธ๋ก XML์ ๊ตฌํํ๊ธฐ ์ํด์๋
ํจ์๋ก ๊ตฌํ
function ์ฌ๋(์ด๋ฆ, age, ํ๊ต){
}
์ฌ๋('April', 3, '๋ค๋์ฅ์ด๋ฆฐ์ด์ง');
์ค์ง์ ์ผ๋ก๋ ์ด ํจ์๊ฐ ์คํ์ด ๋๋ค!
--> <์ฌ๋ ์ด๋ฆ = "April" age=3 ํ๊ต="๋ค๋์ฅ์ด๋ฆฐ์ด์ง">
--> ํ์ผํ์ฅ์๋ฅผ .jsx --> ํ์ฌ๋ .js๋ก ์จ๋ ์์์ ํด์ํด์ค
(ํ์
์คํฌ๋ฆฝํธ๋ ์์ง ๊ตฌ๋ถ ํ์)
<React.StrictMode></React.StrictMode>
์๊ฒฉ๊ฒ์ฌ๋ชจ๋, ์ต์ด๋ก ๊ทธ๋ฆฐ ํ ๋ค์ ์ง์ ๋ค๊ฐ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์
์คํํ์ฌ ๋๋ฒ ๊ทธ๋ ธ์ ๋๋ ์ด์์ด ์๋์ง ํ์ธํ๊ธฐ ์ํ ์ฉ๋
ํฐ๋ฏธ๋์ ์ผ์ ๋ช
๋ น์ด๋ก ์คํ๊ฐ๋ฅ
1. cd react/test
2. react-scripts start ์น๊ธฐ ๋๋ฌด ๊ธธ๊ณ ์ธ์ฐ๊ธฐ ํ๋๋๊น ๋ณ๋ช
์ ์ค์ ํด์ค ์ ์๋ค
3. ํ๋ก์ ํธ์ ๋ํ ๋ช
๋ น์ด๋๊น ํ๋ก์ ํธ์ ์ค์ ํ์ผ
package.json ์ผ๋ก ๊ฐ์
scripts ๋ก ๊ฐ์ npm start(๋ด๊ฐ ์ง์ ๋ณ๋ช
์ค์์ start๋ฅผ ์คํ์์ผ์ค)
jsx ์ค ๊ธฐ์กด html ํ๊ทธ ์ด๋ฆ๊ณผ ๋๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ง๋ค์ด์ ธ์๋
ํ๊ทธ๋ค์ด ์๋ค --> ํด์ํ ๋ html ํ๊ทธ์ ๋์ผํ๊ฒ ํด์
๋ง๋ค ๋ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์์
html์๋ ์๋ ์์ฑ์ ์จ๋ ๋๋ค
<h1 onclick="f()" aaa ="April" id="title" class="important">์๋
</h1>
--> html h1ํ๊ทธ ์์ฑ์ผ๋ก๋ aaa๊ฐ ์์ผ๋ฏ๋ก ๋ฌด์๋จ
class๋ก ์ค์ ํ๊ณ ์ถ์ ๋์์ className์ ๊ฐ์ ๋๊ฒจ์ค์ผํ๋ค
*์ด๋ฒคํธ ์นด๋ฉํ๊ธฐ๋ฒ(๋๋ฌธ์)์ผ๋ก ๋ณ๊ฒฝ, ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋ ํจ์์์ฒด๋ฅผ ๋๊ฒจ์ค์ผํ๋ค
<h1 onClick=f aaa ="April" id="title" className="important">์๋
</h1>
--> h1(aaa="April", id="title", className="important", children="์๋
");
์๋ฐ์คํฌ๋ฆฝํธ์ class๋ผ๋ ๋ช
๋ น์ด(ํค์๋)๊ฐ ์ด๋ฏธ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ className์ผ๋ก ์ด๋ค
๋ด๋ถ์ ์ธ ํจ์์ ์ฝ๋๋ฅผ ๊ฑฐ์ณ์
๊ฒฐ๊ณผ๋ก ๋์ค๋ ๊ฒ์
<h1 id="title" class="important" onClick="f()">์๋
</h1>
์ด๋ฌํ html ํ๊ทธ๊ฐ์ฒด๊ฐ ๊ฒฐ๊ณผ๋ก ๋์ค๊ฒ ๋์ด์์
jsx ์ค์์ htmlํ๊ทธ์ ๋๊ฐ์ ์ด๋ฆ์ด ์๋ ํ๊ทธ : ์ปดํฌ๋ํธ ex.
์ปดํฌ๋ํธ๋ ๋ฐ๋์ ๋๋ฌธ์๋ก ์์ํด์ผํ๋ค
์ปดํฌ๋ํธ๋ ์ด์จ๋ jsx์ด๊ธฐ ๋๋ฌธ์ ํจ์๋ก ๋ง๋ค์ด์ง๋ค
(๊ณผ๊ฑฐ์๋ ํด๋์ค๋ก ๋ง๋ค์์ --> ๊ถ์ฅX --> ํจ์๋ก ๋ง๋ค๊ฒ ๋ฐ์ )
return ๋ ๋ ํ ๊ฐ๋ง return ๋์ด์ผ ํ๋ค(๋ฌถ์ฌ์)
๋ณดํต์ div๋ก ๋ฌถ์ด์ return์ ํ๋๋ฐ,
์ด div๊ฐ ์ ๋ง ์๋ฏธ์์ด ๋ฌถ์ด์ฃผ๊ธฐ ์ํด์๋ง ์ฌ์ฉํ๋ค๋ฉด ๋ถํ์ํ๊ธฐ ๋๋ฌธ์
๊ทธ๋ด ๊ฒฝ์ฐ์๋ fragment <> </> ๋น์ด์๋ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌถ์ด์ค ์ ์๋ค
๋ด์ฉ์ด ์๋ jsx๋ ์ด๋ป๊ฒ ํ๊ธฐ?
html --> jsx
<img> <img />
<input> <input />
<p>์๋
</p> <p>์๋
</p>
<April>์๋
</April>
<p></p> <p /> or <p></p>
<April />
function a(){
return "April";
}
a();
function April(){
return(
<div>a()</div>
);
}
import logo from './logo.svg';
import './App.css';
import April from './day01/d01MyComponent';
function App() {
return (<April></April>);
}
export default App;
๋ค์์๊ฐ
export์ export default ์ฐจ์ด์ ์ด
css ์ ์ฉ๋ฐฉ๋ฒ?