반응형
useRef vs useState
useRef | useState |
Reference 객체를 생성 | State를 생성 |
컴포넌트 내부의 변수로 활용 가능 | 컴포넌트 내부의 변수로 활용 가능 |
값이 바뀌어도 컵포넌트 리렌더링 발생하지 않음 | 값이 바뀌면 컵포넌트 리렌더링 발생 |
사용 예)
input tag에 DOM 요소를 reference 객체에 저장하여 input값이 빈 경우 focus 호출
import { useState, useRef } from "react";
const Register = () => {
const [input, setInput] = useState({
name: "",
birth: "",
country: "",
bio: "",
});
const countRef = useRef(0);
const inputRef = useRef();
console.log(input);
// 통합 이벤트 핸들러
const onChange = (e) => {
countRef.current++;
current++;
console.log("countref current", countRef.current);
console.log("current", current);
setInput({
...input,
[e.target.name]: e.target.value, // 대괄호를 쓰는 이유는 key로 사용 한다는 의미
});
};
const onSubmit = () => {
if (input.name === "") {
console.log(inputRef.current); // <input name="name" placeholder="이름" value="">
// 이름을 입력하면 DOM 요소 포커스
inputRef.current.focus();
}
};
return (
<div>
<div>
<input
ref={inputRef} // input tag DOM 요소가 inputRef 오브젝트에 저장 됨
name="name"
value={input.name}
onChange={onChange}
placeholder={"이름"}
/>
</div>
<div>
<input
name="birth"
value={input.birth}
type="date"
onChange={onChange}
/>
</div>
<div>
<select name="country" value={input.country} onChange={onChange}>
<option value=""></option>
<option value="KR">한국</option>
<option value="US">미국</option>
<option value="UK">영국</option>
<option value="CA">캐나다</option>
</select>
</div>
<div>
<textarea name="bio" value={input.bio} onChange={onChange} />
</div>
<button onClick={onSubmit}>제출</button>
</div>
);
};
export default Register;
파일내의(=컴포넌트의 외부에) let 변수와 userRef의 차이점은?
=> let의 경우 전역변수 처럼 하나의 컴포넌트가 여러개로 사용될 경우 let변수를 공유하게 됨.
=> userRef의 경우 같은 컴포넌트라도 각각이 useRef를 가지고 있음
반응형
'React' 카테고리의 다른 글
[React] component Life Cycle / useEffect를 통한 component Life Cycle 제어 (2) | 2024.09.01 |
---|---|
[React] component 기본 구조 / State Lifting (0) | 2024.09.01 |
[React] Comonent 리랜더링 조건 / State로 Component 상태 관리 (0) | 2024.08.18 |
[React] Props를 통해 Component로 데이터 전달 (0) | 2024.08.04 |
[React] Component & JSX (0) | 2024.08.04 |