πŸ“

5. Hook - useState

μ»΄ν¬λ„ŒνŠΈμ— λ³€ν•˜λŠ” 데이터 λ„£κ³  μ‹Άμ–΄μš”.

λ“€μ–΄κ°€κΈ° μ „ : ꡬ쑰뢄해할당
Β 
λ²„νŠΌμ„ λ§Œλ“€κ³  클릭을 ν•  λ•Œλ§ˆλ‹€ λ³€μˆ˜μ— 1μ”© λ”ν•΄μ£ΌλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  둜그λ₯Ό 좜λ ₯ν•΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. μ’‹μ•„ν•˜λŠ” 색 ν•˜λ‹¨μ— λ²„νŠΌμ„ λ§Œλ“€μ–΄μ£Όκ³ , λ²„νŠΌμ— 클릭 이벀트λ₯Ό 넣도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
이전 μ±•ν„°μ—μ„œ μ—¬λŸ¬ 개의 단어가 κ²°ν•©λ˜μ–΄ 있으면 λŒ€λ¬Έμžλ‘œ κ΅¬λΆ„ν–ˆλ˜ 것 κΈ°μ–΅ν•˜μ‹œλ‚˜μš”? htmlμ—μ„œλŠ” <button onclick="ν•¨μˆ˜μ΄λ¦„"> 으둜 μ„ μ–Έν•˜λ˜ 것과 달리 λ¦¬μ•‘νŠΈμ—μ„œλŠ” <button onClick={ν•¨μˆ˜}>둜 μ„ μ–Έν•©λ‹ˆλ‹€.
function Resume(props) { let like = 0; function clickLike() { like += 1; console.log(like); } const myColor = props.color; const styleColor = {color:myColor}; return( <div style={{border:"solid 1px", width:"500px"}}> <h1>{props.name} μžκΈ°μ†Œκ°œμ„œ</h1> <h1>{props.hello}</h1> <h2>μ·¨λ―Έ : {props.hobby}</h2> <h2>μ’‹μ•„ν•˜λŠ” μŒμ‹ : {props.food}</h2> <h2>μ’‹μ•„ν•˜λŠ” 색 : <span style={styleColor}>{myColor}</span></h2> <button onClick={clickLike}>like <span>{like}</span></button> </div> ) } export default Resume;
Β 
notion imagenotion image
Β 
like λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œλ§ˆλ‹€ λ§Œλ“€μ–΄λ‘” λ³€μˆ˜κ°€ λ³€ν•˜λŠ” 것을 개발자 도ꡬλ₯Ό μΌœλ³΄μ‹œλ©΄ 보싀 수 μžˆμŠ΅λ‹ˆλ‹€. 이제 이 λ³€μˆ˜λ₯Ό 맀번 νŽ˜μ΄μ§€μ—μ„œ λ‹€μ‹œ 그리도둝 ν•΄μ•Ό ν•©λ‹ˆλ‹€.
Β 

useState

이것을 λ„μ™€μ£ΌλŠ” 것이 stateμž…λ‹ˆλ‹€. λ°”λ‘œ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
import React, { useState } from 'react'; function Resume(props) { const [like, setLike] = useState(0); // console.log(useState(0)); // let like = 0; const myColor = props.color; const styleColor = {color:myColor}; return( <div style={{border:"solid 1px", width:"500px"}}> <h1>{props.name} μžκΈ°μ†Œκ°œμ„œ</h1> <h1>{props.hello}</h1> <h2>μ·¨λ―Έ : {props.hobby}</h2> <h2>μ’‹μ•„ν•˜λŠ” μŒμ‹ : {props.food}</h2> <h2>μ’‹μ•„ν•˜λŠ” 색 : <span style={styleColor}>{myColor}</span></h2> <button onClick={clickLike}>like <span>{like}</span></button> </div> ); } export default Resume;
Β 
λ¨Όμ €, useState Hook을 Reactμ—μ„œ import ν•˜κΈ° μœ„ν•΄ import ꡬ문에 {useState} λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
useStateλ₯Ό μ‹€ν–‰ν•˜λ©΄ state λ³€μˆ˜μ™€ state λ³€μˆ˜μ˜ μƒνƒœλ₯Ό 바꿔쀄 수 μžˆλŠ” ν•¨μˆ˜κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€. 그러면 ꡬ쑰뢄해할당 문법을 μ΄μš©ν•΄ like와 setLike에 λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•˜κ²Œ λ©λ‹ˆλ‹€.
useState의 κ΄„ν˜Έ μ•ˆμ—λŠ” μ΄ˆκΈ°κ°’μ„ 넣을 수 μžˆμŠ΅λ‹ˆλ‹€. 0을 λ„£κ²Œ 되면 like의 μ΄ˆκΈ°κ°’μ€ 0이 되고, ""을 λ„£κ²Œ 되면 like의 μ΄ˆκΈ°κ°’μ€ "" κ°€ λ©λ‹ˆλ‹€.
likeλŠ” 0으둜 μ΄ˆκΈ°ν™”λ˜μ–΄μžˆλŠ” 값이고, setLikeλŠ” like값을 λ³€κ²½ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜μž…λ‹ˆλ‹€.
Β 
μ΄λ ‡κ²Œ 보면 λ³€μˆ˜λ₯Ό λ§Œλ“€κ³  λ³€μˆ˜μ˜ 값을 λ³€κ²½ν•˜λ©΄ λ˜μ§€ μ•Šλ‚˜μš”? μ™œ useStateλ₯Ό μ‚¬μš©ν•˜λ‚˜μš”? λΌλŠ” 생각이 λ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ³€μˆ˜λ₯Ό λ§Œλ“€κ³  값을 λ³€κ²½ν•˜λ©΄, λ³€μˆ˜ κ°’μ˜ λ³€ν™”λ₯Ό μ²΄ν¬ν•˜κ³  λ‹€μ‹œ λ Œλ”λ§μ„ ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ useStateλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 setState(μ˜ˆμ‹œμ—μ„œλŠ” setLike)λ₯Ό 톡해 값이 변경될 λ•Œ λ¦¬μ•‘νŠΈλŠ” μžλ™μœΌλ‘œ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹€μ‹œ λ Œλ”λ§ν•΄μ€λ‹ˆλ‹€.
μ–΄λ–€ μƒνƒœ(state)κ°€ λ³€κ²½λ˜λ©΄ κ·Έ 뢀뢄을 λ‹€μ‹œ λžœλ”λ§ν•˜λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ ν™”λ©΄μ—μ„œ 계속 λ°”λ€ŒλŠ” 뢀뢄은 λŒ€λΆ€λΆ„ stateλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
μ˜ˆμ‹œ) 클릭 μ΄λ²€νŠΈκ°€ 일어날 λ•Œλ§ˆλ‹€ μ’‹μ•„μš” μˆ«μžκ°€ λ°”λ€ŒλŠ” 것, 데이터가 λ°”λ€” λ•Œλ§ˆλ‹€ 바뀐 데이터λ₯Ό λ³΄μ—¬μ£ΌλŠ” 것
Β 
import React, { useState } from "react"; function Resume(props) { const [like, setLike] = useState(0); function clickLike() { setLike(like + 1); } const myColor = props.color; const styleColor = { color: myColor }; return ( <div style={{ border: "solid 1px", width: "500px" }}> <h1>{props.name} μžκΈ°μ†Œκ°œμ„œ</h1> <h1>{props.hello}</h1> <h2>μ·¨λ―Έ : {props.hobby}</h2> <h2>μ’‹μ•„ν•˜λŠ” μŒμ‹ : {props.food}</h2> <h2> μ’‹μ•„ν•˜λŠ” 색 : <span style={styleColor}>{myColor}</span> </h2> <button onClick={clickLike}>like</button> <span>{like}</span> </div> ); } export default Resume;
Β 
Β 

μ‹€μ œ μ μš©ν•΄λ³΄κΈ°(useState) β‘ 

like λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ 'Like'κ°€ λ‚˜νƒ€λ‚˜κ³ , λ‹€μ‹œ like λ²„νŠΌμ„ λˆŒλ €μ„ λ•ŒλŠ” 'Like'κ°€ 사라지도둝 λ°”κΏ”λ³΄μ„Έμš”!
like λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œlike λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ
like λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ
like λ²„νŠΌμ„ λ‹€μ‹œ ν΄λ¦­ν–ˆμ„ λ•Œlike λ²„νŠΌμ„ λ‹€μ‹œ ν΄λ¦­ν–ˆμ„ λ•Œ
like λ²„νŠΌμ„ λ‹€μ‹œ ν΄λ¦­ν–ˆμ„ λ•Œ
μ •λ‹΅
import React, { useState } from "react"; function Resume(props) { const [like, setLike] = useState(""); function clickLike() { if (like === "") { setLike("Like"); } else { setLike(""); } } const myColor = props.color; const styleColor = { color: myColor }; return ( <div style={{ border: "solid 1px", width: "500px" }}> <h1>{props.name} μžκΈ°μ†Œκ°œμ„œ</h1> <h1>{props.hello}</h1> <h2>μ·¨λ―Έ : {props.hobby}</h2> <h2>μ’‹μ•„ν•˜λŠ” μŒμ‹ : {props.food}</h2> <h2> μ’‹μ•„ν•˜λŠ” 색 : <span style={styleColor}>{myColor}</span> </h2> <button onClick={clickLike}>like</button> <span>{like}</span> </div> ); } export default Resume;
Β