
๋ฐ๋ผ์ useState์ useRef๋ ์๋ก ๋ค๋ฅธ ์ฉ๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ์ ํ๋์ด์ผ ํฉ๋๋ค.
useRef๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ์ํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
function AutoFocusInput() {
const inputRef = useRef();
useEffect(() => {
inputRef.current.focus();
}, []);
return <input ref={inputRef} />;
}
useEffect์ useRef๋ฅผ ์กฐํฉํด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ์๋์ผ๋ก ์ ๋ ฅ ํ๋์ ํฌ์ปค์ค๋ฅผ ์ค๋๋ค
// ๊ธฐ์กด useState ์ฌ์ฉ ์ฝ๋
import { useState } from "react";
export default function Player() {
// enteredPlayerName ์ํ๋ฅผ ์ ์ฅํ๊ณ ์
๋ฐ์ดํธํ๊ธฐ ์ํ useState ํ
const [enteredPlayerName, setEnteredPlayerName] = useState('');
const [submitted, setSubmitted] = useState(false);
// ์
๋ ฅ ํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ๋๋ ํจ์
function handleChange(event){
setSubmitted(false);
// ์
๋ ฅ ํ๋์์ ์
๋ ฅ๋ ๊ฐ์ ์ํ๋ก ์ค์
setEnteredPlayerName(event.target.value);
}
function handleClick(){
setSubmitted(true);
}
return (
<section id="player">
<h2>Welcome {submitted ? enteredPlayerName : "unknown entity"}</h2>
<p>
<input
type="text"
onChange={handleChange} // ์
๋ ฅ ํ๋์ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค handleChange ํจ์ ํธ์ถ
value={enteredPlayerName} // ์
๋ ฅ ํ๋ ๊ฐ์ enteredPlayerName ์ํ์ ๋๊ธฐํ
/>
<button onClick={handleClick}>Set Name</button>
</p>
</section>
);
}
์ ๋ ฅ ํ๋์์์ ์ฌ์ฉ์ ์ ๋ ฅ์ useState๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ก ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
์ ๋ ฅ์ด ๋ณํ ๋๋ง๋ค handleChange ํจ์๊ฐ ํธ์ถ๋์ด ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์ด ์ํ ์ ๋ฐ์ดํธ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, submitted ์ํ๊ฐ true๋ก ์ค์ ๋์ด, ์ ๋ ฅ๋ ์ด๋ฆ์ด ํ๋ฉด์ ํ์๋ฉ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์ปดํฌ๋ํธ์ ๋ฐ์์ ์ง์ ์ ์ผ๋ก ํ์ธํ ์ ์๊ฒ ํด์ค๋๋ค.
// useRef๋ฅผ ์ฌ์ฉํ ์ฝ๋
import { useState, useRef } from "react";
export default function Player() {
// input ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์์ฑ
const playerName = useRef();
const [enteredPlayerName, setEnteredPlayerName] = useState('');
function handleClick(){
// โญ์ฐธ์กฐ๋ฅผ ํตํด ์
๋ ฅ ํ๋์์ ๊ฐ์ ๊ฐ์ ธ์ ์ํ ์
๋ฐ์ดํธ
setEnteredPlayerName(playerName.current.value);
}
return (
<section id="player">
<h2>Welcome {enteredPlayerName || "unknown entity"}</h2>
<p>
<input
ref={playerName} // โญuseRef ํ
์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ฐธ์กฐ๋ฅผ input ์์์ ํ ๋น
type="text"
/>
<button onClick={handleClick}>Set Name</button>
</p>
</section>
);
}
useRef๋ DOM ์์์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ์ฐธ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ๋ ฅ ํ๋์ ์ ๋ ฅ๋ ๊ฐ์ ์ํ๋ก ๊ด๋ฆฌ๋์ง ์๊ณ , ์ฐธ์กฐ๋ฅผ ํตํด ์ง์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ ๊ทผํฉ๋๋ค.
handleClick ํจ์๊ฐ ํธ์ถ๋ ๋๋ง ์ ๋ ฅ ํ๋์ ๊ฐ์ ์ฝ์ด ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ฏ๋ก,
โญ์ ๋ ฅ ์ค์๋ ์ปดํฌ๋ํธ๊ฐ ๋ถํ์ํ๊ฒ ๋ฆฌ๋ ๋๋ง๋์ง ์์ต๋๋ค.
์ฌ์ฉ์์ ์ ๋ ฅ์ด ๋ด๋ถ ์ํ์ ์ ์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์, ์ํ ์ ๋ฐ์ดํธ๋ก ์ธํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.