React ๊ธฐ์ด
React JS: UI๋ฅผ interative(์ํธ์์ฉ)ํ๊ฒ ๋ง๋ค์ด์ค
* React ๋ํ์ ์ธ ํน์ง 3๊ฐ์ง
1. JSX ๋ฌธ๋ฒ
2. Component ๊ธฐ๋ฐ
3. Virtual DOM
<React js ์ฌ์ฉX - vanilla js>
<React js>
- element ์์ฑ ๋ฐฉ๋ฒ
1.
const span = React.createElement("span",{ID:"sexy-span"}, "Hello I'm a span");
//2๋ฒ์งธ ์ธ์: span์ property, 3๋ฒ์งธ ์ธ์: span์ ๋ด์ฉ -> ์ ์ฌ์ฉ ์ํจ(๋๋ฌด ์ด๋ ต)
1) React JS: ์์ง, UI๋ฅผ interativeํ๊ฒ ๋ง๋ค์ด์ค
2) react-dom: react element๋ฅผ HTML์ ๋๋ ์ญํ
- render: react element๋ฅผ ๊ฐ์ง๊ณ html๋ก ๋ง๋ค์ด ๋ฐฐ์น -> ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค
- ๋ ๋๋ง: html์์ ๋๋ react์์ ๋ฑ์ ์ฝ๋๊ฐ ๋์ ๋ณผ ์ ์๋๋ก ๊ทธ๋ ค์ง๋ ๊ฒ
2. JSX
- ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฅํ ๋ฌธ์
- HTML์์ ์ฌ์ฉํ ๋ฌธ๋ฒ๊ณผ ๋น์ทํ ๋ฌธ๋ฒ ์ฌ์ฉ
- Babel: ์ฝ๋๋ฅผ ๋ณํํด์ค, jsx๋ก ์ ์ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ํํ๋ก ๋ฐ๊พธ์ด์ค
- ์ปดํฌ๋ํธ์ ์ฒซ ๊ธ์๋ ๋ฐ๋์ ๋๋ฌธ์: jsx์์๋ ๊ทธ๋ฅ ํ๊ทธ๊ฐ ๋์ด๋ฒ๋ฆผ
- ํจ์ ๋ง๋๋ ๋ฐฉ๋ฒ:
1) function ํจ์๋ช (){
return(~~~~);
}
2) ํจ์๋ช = () => (~~~)
**์ค๋ฅ ๋ถ๋ถ
1 (์ปดํฌ๋ํธ X) : ReactDOM.render(Container , root);
2 (์ปดํฌ๋ํธO) : ReactDOM.render(<Container />, root); <- ์ด ์ฝ๋ ์ ์ฉํด์ผ ์คํ๋จ
- State: ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ -> ๊ฐ์ด ๋ฐ๋๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๋ด์์ค
- modifierํจ์: ๊ฐ์ ๋ฐ์ ์ ๋ฐ์ดํธํ๊ณ ๋ฆฌ๋ ๋๋งํด์ค -> modifier(๊ฐ)
- modifierํจ์๋ฅผ ๊ฐ์ง๊ณ state๋ฅผ ๋ณ๊ฒฝํ ๋, ์ปดํฌ๋ํธ๊ฐ ์ฌ์์ฑ๋จ -> ์๋ก์ด ๊ฐ์ ๊ฐ์ง๊ณ ๋ฆฌ๋ ๋๋ง๋๋ ๊ฒ
์ฑ์ state๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ: ํ์ฌ state๋ฅผ ์ด์ฉํด ๋ค์ state์ ๊ฐ ๊ณ์ฐํด๋
1) setCounter๋ฅผ ์ด์ฉํด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฐ ๋๊น
2) ์ด์ ๊ฐ ์ด์ฉํด ๋ค์ ๊ฐ ์์๋ด๋ ๊ฒ
//setCounter(counter+1);
setCounter((current) => current+1);
-> ๋ ์ฝ๋๋ ์ด์ ๊ฐ์ ์ด์ฉํด ๋ค์ ๊ฐ์ ์์๋ด๋ ๊ฒ์ด๋ค: ์๋ ์ฝ๋๊ฐ ๋ ์์ !
[JSX์ฌ์ฉ ์ ์ฃผ์ํ ์ ]
- class ์ฌ์ฉํ๋ฉด ์๋จ ->className
- for์ฌ์ฉ X -> htmlFor
- input: uncontrolled -> input์ value๋ฅผ ํต์ ํ ์์์
- flipped: true ํน์ false
Props: ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ๋ฒ
-> btn์ด ๋ฐ๋ ์ ์ผํ ์ธ์
Prop Types: prop๋ค์ ํ์ ํ์ธ -> ๊ฒฝ๊ณ ๋ฅผ ํ์ธํ๊ธฐ ์ํด(์ด๋ค prop๋ค์ ๋ฐ๋์ง ๊ฒ์ฌ)
* prop์ ์ ๋ฌํ ๋์ ์ด๋ฆ๊ณผ ๋ฐ์์ ์ฌ์ฉํ ๋์ ์ด๋ฆ์ด ๋์ผํด์ผํจ
create-react-app:๋ฆฌ์กํธ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ์ต๊ณ ์ ๋ฐฉ์
- ๋ง์ ์คํฌ๋ฆฝํธ, ์ฌ์ ์ค์ ๋ค ์กด์ฌ