๐Ÿ“ฆ React state, Props, Event

Dayยท2022๋…„ 4์›” 15์ผ
0
post-thumbnail

๐ŸŽฅ Hook

๐Ÿ“”State

์ƒํƒœ๊ฐ’์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด์„œ, ํ•จ์ˆ˜ ์ปดํผ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ render๋œ๋‹ค๋Š”๊ฒŒ ์ค‘์š”.
๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋€ state๊ฐ’์„ ๋ฐ˜์˜ํ•˜๊ฒŒ ๋œ๋‹ค.

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ state

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ state, setState

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ useState์™€ ๋‹ค๋ฅด๊ฒŒ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ์•„๋ž˜์ฒ˜๋Ÿผ ์„ ์–ธํ•ด์ฃผ๊ฑฐ๋‚˜, consturctor ๋ฉ”์†Œ๋“œ๋กœ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
state๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด setState ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค..
useState์™€ ๋‹ค๋ฅด๊ฒŒ arugment๊ฐ€ object(๊ฐ์ฒด)์ธ ์ ์„ ์ฃผ์˜ํ•ด์•ผ ํ•จ.

{๋ณ€์ˆ˜: "์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฐ’"} ํ˜•์‹์œผ๋กœ setState ๋ฉ”์†Œ๋“œ๋กœ state๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
ํด๋ž˜์Šค์ด๋ฏ€๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, this.๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€ ์  ์™ธ์—๋Š” ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„ ์ ์ด ์—†๋‹ค.

// class_say.js
import React, { Component } from "react";

class Say extends Component {
 state = {
   message: "์–ด์„œ์˜ค์‹ญ์‡ผ!",
   color: "black",
 };

 onClickEnter = () => this.setState({ message: "์ฃผ๋ฌธ ์–ด๋–ป๊ฒŒ ํ•ด๋“œ๋ฆด๊นŒ์š”?" });
 onClickLeave = () =>
   this.setState({ message: "์•ˆ๋…•ํžˆ ๊ฐ€์„ธ์š”. ๋‹ค์Œ์— ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค!" });

 render() {
   const { color, message } = this.state;
   return (
     <div>
       <button onClick={this.onClickEnter}>์ฃผ๋ฌธ</button>
       <button onClick={this.onClickLeave}>ํ‡ด์žฅ</button>
       <h1 style={{ color }}>{message}</h1>
       <button
         style={{ color: "red" }}
         onClick={() => this.setState({ color: "red" })}
       >
         ๋นจ๊ฐ„์ƒ‰
       </button>
       <button
         style={{ color: "blue" }}
         onClick={() => this.setState({ color: "blue" })}
       >
         ํŒŒ๋ž€์ƒ‰
       </button>
       <button
         style={{ color: "green" }}
         onClick={() => this.setState({ color: "green" })}
       >
         ๋…น์ƒ‰
       </button>
     </div>
   );
 }
}

export default Say;
 // App.js
import React from "react";
import Say from "./class_say";

function App() {
  return <Say />;
}

export default App;

ํด๋ž˜์Šคํ˜• ์ปดํผ๋„ŒํŠธ๋ฅผ ์•ˆ๋ฐฐ์›Œ์„œ ์ž˜ ๋ชฐ๋ž๋Š”๋ฐ, ๊ทธ๋ƒฅ state ์“ฐ๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์ปดํผ๋„ŒํŠธ ์ž์ฒด๊ฐ€ ํด๋ž˜์Šค ์˜€๊ตฌ๋‚˜

๐Ÿ“ฐProps

props๋Š”
๋ถ€๋ชจ ์ปดํผ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด

์–ด๋–ค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ’์ด๋“  ๋ชจ๋‘ ์ „๋‹ฌ ๊ฐ€๋Šฅ ( ๋ณ€์ˆ˜,state๊ฐ’ event handler ๋“ฑ)

titleColor ์†์„ฑ์„ ๋งŒ๋“ค์—ˆ๋‹ค.
props๋ฅผ ์ด์šฉํ•ด์„œ color๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค.
์ €๋ ‡๊ฒŒ ์†์„ฑ์„ ๋งŒ๋“ค๋ฉด props ๋ผ๋Š” ๊ฐ์ฒด์— ์ž๋™์œผ๋กœ titleColor ํ•˜๊ณ  ์ถ”๊ฐ€๊ฐ€ ๋˜๋‚˜๋ณด๋‹ค.

์ž์‹ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ถ€๋ชจ๊ฐ€ ์ „๋‹ฌํ•œ props๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.

props ๊ฐ์ฒด ์•ˆ์— ๋ถ€๋ชจ๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ key - value ํ˜•ํƒœ๋กœ ๋‹ด๊ฒจ์žˆ๋‹ค.

props๋Š” ๋ถ€๋ชจ์™€ ์ž์‹ ๊ฐ„์˜ ๊ด€๊ณ„์—์„œ ์“ฐ์ด๋Š” ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์—,
๊ทธ ์ฃผ๊ณ  ๋ฐ›๋Š” ์‹ ํ˜ธ(์†์„ฑ)๋งŒ ๋งž์œผ๋ฉด ์ž์‹ํ•œํ…Œ ๋ฐ์ดํ„ฐ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
๋ถ€๋ชจ ์ž์‹ ์†์ž๊ฐ€ ์žˆ์„ ๋•Œ์—๋„,
์ž์‹๊ณผ ์†์ž์˜ props ์†์„ฑ๋งŒ ํ†ต์ผ๋˜์–ด ์‹ ํ˜ธ ์ „๋‹ฌ๋˜๋ฉด,
๋ถ€๋ชจ์˜ ์ •๋ณด๊ฐ€ ํƒ€๊ณ  ํƒ€๊ณ  ์†์žํ•œํ…Œ ๊ฐˆ ์ˆ˜ ์žˆ์Œ.

  • ํด๋ฆญ ์ด๋ฒคํŠธ ๋ฐœ์ƒ
  • ChangeColor ์‹คํ–‰๋จ
  • ์ฆ‰ ๋ถ€๋ชจ ์ปดํผ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ setColor ํ•จ์ˆ˜ ์‹คํ–‰๋จ.
  • setColor๋Š” state ๋ณ€ํ™”๋˜๋ฉด์„œ(blue), return์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜ค๋ฉด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ฝ๋Š”๋‹ค.
    (๋‹ค์‹œ ์ฝ์–ด๋‚ด๋ ค์˜ค๋ฉด์„œ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด์„œ ๋‹ค์‹œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๋Š๋‚Œ)
  • ๋‚ด๋ ค์˜ค๋ฉด์„œ child ์ปดํผ๋„ŒํŠธ์— color์„ ํ†ตํ•ด ๋ณ€๊ฒฝ๋œ state ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•จ.
  • props.titleColor์„ ํ†ตํ•ด์„œ h1 ์ƒ‰์ƒ ๋ณ€๊ฒฝ๋จ

useState() [color,setColor]['red',f]

์ด๋Ÿฐ ํ˜•ํƒœ๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์ด๋ผ๊ณ  ํ•จ.
์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ.
๋ฐฐ์—ด์˜ ๊ฐ์ž ๊ตฌ์กฐ๋ฅผ ๋ถ„ํ•ดํ•œ ๋‹ค์Œ์— ํ• ๋‹น์„ ํ•ด์ค€๋‹ค~ ๋ผ๋Š” ๊ฐœ๋…

const arr = [1,2,3];
const [a,b,c] = [1,2,3];   
console.log(a,b,c) 1 2 3 
//arr[0] arr[1] ์ด๋ ‡๊ฒŒ ์•ˆํ•ด๋„ ๋จ

//๋ณด๊ธฐ ์‰ฝ๊ณ  ์“ฐ๊ธฐ ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ด ๋ฐฉ๋ฒ•์ด ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น ์ด๋ผ๊ณ  ํ•จ
const Login=()=>{
 
 const [colors,setColor] = useState("red");
 
 //useState ์ž์ฒด๋ฅผ ์ฝ˜์†”์ฐ์œผ๋ฉด ๊ธธ์ด๊ฐ€ 2์ธ ๋ฐฐ์—ด์ด ๋‚˜์˜จ๋‹ค. 
 //์ฒซ๋ฒˆ์งธ ์š”์†Œ๋Š” red๊ณ  ๋‘๋ฒˆ์งธ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ฐํž˜
 
 //๊ทธ ๊ธธ์ด๊ฐ€ 2์ธ ๊ฒƒ๋“ค์ด ๊ฐ๊ฐ [color, setColor] ์ด๋ผ๋Š” ๊ฑฐ์ง€
 
 console.log(color)   //  "red" 
 

 //{}๋‘๊ฐœ ์ธ๊ฑด, ์Šคํƒ€์ผ ์†์„ฑ ๊ฐ์ฒด + javascript๋‹ˆ๊นŒ 
 
 
 
 <button onClick={changeColor}> </button> 
 
 //onclickํ• ๋•Œ๋งˆ๋‹ค ์ € ์•ˆ ํ•จ์ˆ˜ ์‹คํ–‰
 
// ์˜ˆ์ œ์—์„œ๋Š” ๋ฐ”๋กœ ๋„ฃ์Œ. ๋”ฐ๋กœ ์„ ์–ธ ์•ˆํ•˜๊ณ .
// ๋”ฐ๋กœ ์„ ์–ธ ์•ˆํ•˜๊ณ  ๊ทธ๋ƒฅ ์•ˆ์—๋‹ค ์ง์ ‘ ๋„ฃ์œผ๋ฉด ๊ทธ๋ƒฅ ํ•œ๋ฒˆ ์ฐ์„๋•Œ๋งŒ ์ง„ํ–‰ํ•œ๋‹ค. 
 (์ง„์งœ ์ค‘์š”ํ•œ๊ฑฐ - > ํ•จ์ˆ˜์— ๊ด„ํ˜ธ ๋„ฃ์œผ๋ฉด ์ฆ‰์‹œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค.)
 
 setcolor ์ด๋ผ๋Š” ๊ฑด ์‹ ๊ธฐํ•œ๊ฒŒ, setcolor์„ ์ด์šฉํ•˜๋ฉด, ์ „์ฒด ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ ๋” ๋Œ๋ฆฐ๋‹ค.(์žฌ๋ Œ๋”๋ง)

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ญ”๊ฐ€ ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ค„ ๋•Œ ์“ฐ๋Š” ๊ฐœ๋…์ด props ๋‹ค.

์ •๋ณด ์ „๋‹ฌ์€ ํ•œ๋ฐฉํ–ฅ. ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ.

props๋ฅผ ์ฐ์œผ๋ฉด ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜จ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€