alswlfl 2022. 7. 9. 02:24

React JS: UI๋ฅผ interative(์ƒํ˜ธ์ž‘์šฉ)ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์คŒ

* React  ๋Œ€ํ‘œ์ ์ธ ํŠน์ง• 3๊ฐ€์ง€

1. JSX ๋ฌธ๋ฒ•

2. Component ๊ธฐ๋ฐ˜

3. Virtual DOM

 

<React js ์‚ฌ์šฉX - vanilla js>

<!DOCTYPE html>
<html>
    <body>    //1. html๋งŒ๋“ค๊ธฐ
        <span>Total clicks: 0</span>
        <button id="btn">Click me</button>
    </body>
    <script>
        let counter=0;
        const button = document.getElementById("btn");  //2. js์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
        const span = document.querySelector("span");
        function handleClick(){
            counter = counter+1 //4. ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ
            span.innerText = `Total clicks: ${counter}` //5. html์—…๋ฐ์ดํŠธ
        }  
        button.addEventListener("click", handleClick);   //3. ์ด๋ฒคํŠธ ๊ฐ์ง€
    </script>
</html>

<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:๋ฆฌ์•กํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ์ตœ๊ณ ์˜ ๋ฐฉ์‹

- ๋งŽ์€ ์Šคํฌ๋ฆฝํŠธ, ์‚ฌ์ „์„ค์ •๋“ค ์กด์žฌ