일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자바스크립트
- server component
- jQuery
- react
- 실전프로젝트
- 프로그래머스
- 날씨 api
- 항해99후기
- 백준
- JavaScript
- 로딩 후 실행
- 그리디
- 항해99
- 중복선택
- 항해99추천
- greedy
- 부트캠프항해
- 카테고리필터
- 클라이언트 컴포넌트
- 탐욕알고리즘
- 숫자를 별점으로
- 서버 컴포넌트
- db수정
- 배열 중복 제거
- 중복카테고리
- NextJS v13
- 배열 메소드
- 동전 0
- 알고리즘
- 항해99솔직후기
- Today
- Total
공부 및 일상기록
[React] useRef란? 본문
자바스크립트를 사용 할 때, 우리가 특정 DOM에 접근 해야 하는 상황에서는 getElementById 혹은 querySelector 같은 DOM Selector 함수를 사용해서 DOM에 접근해야 한다.
리액트를 사용하는 프로젝트에서도 가끔은 DOM에 직접 접근해야 하는 상황이 발생 할 수 있다.
예를들어 특정 엘리먼트의 크기를 가져와야한다던지, 스크롤바의 위치를 가져온다던지, 포커스를 설정해줘야 한다 등등.. 수많은 상황이 있을 것이다.
그럴 때, 리액트에서 ref라는 것을 사용한다.
함수형 컴포넌트에서 ref는 useRef라는 hook을 사용하게 된다.
https://react.vlpt.us/basic/10-useRef.html
10. useRef 로 특정 DOM 선택하기 · GitBook
10. useRef 로 특정 DOM 선택하기 JavaScript 를 사용 할 때에는, 우리가 특정 DOM 을 선택해야 하는 상황에 getElementById, querySelector 같은 DOM Selector 함수를 사용해서 DOM 을 선택합니다. 리액트를 사용하는
react.vlpt.us
Ref의 용도
Ref의 바람직한 사용 사례는 다음과 같다. (비제어 컴포넌트를 제어할 때)
- 포커스, 텍스트 선택영역, 혹은 미디어의 재생을 관리할 때
- 애니메이션을 직접적으로 실행시킬 때
- 서드 파티 DOM 라이브러리를 React와 같이 사용할 때
이 외 선언적으로 해결될 수 있는 문제에서는 ref 사용을 지양해야 한다.
단순히 DOM에 접근하기 위함이 아닌 리렌더링을 방지하고자 할때 사용하기도 한다.
import React, { useState } from "react";
import styled from "styled-components";
const Test = () => {
const [input, setInput] = useState("");
const inputHandler = (e) => {
setInput(e.target.value);
console.log(input);
};
return (
<>
<Input onChange={inputHandler} />
</>
);
};
export default Test;
const Input = styled.input`
width: 200px;
height: 30px;
`;
위 코드는 input 태그에 문자를 입력하면 state에 저장하는 방법이다. 이 경우 이벤트가 발생할때마다 state가 변경되어 계속해서 리렌더링 된다.
하지만 아래와 같이 코드를 작성 후 버튼을 클릭하여 해당 value값을 가져오도록 한다면 리렌더링 없이 값을 가져올 수 있다.
import React, { useRef, useState } from "react";
import styled from "styled-components";
const Test = () => {
const [input, setInput] = useState("");
const inputRef = useRef();
const onClickHandler = () => {
setInput(inputRef.current.value);
};
console.log(input);
return (
<>
<Input ref={inputRef} />
<button onClick={onClickHandler}>ref!</button>
</>
);
};
export default Test;
const Input = styled.input`
width: 200px;
height: 30px;
`;
'개발 > React' 카테고리의 다른 글
[React] html과 리액트의 이벤트 처리 방식 차이점 (0) | 2023.01.12 |
---|---|
[React] map함수 사용시 key props를 사용해야 하는 이유 (0) | 2023.01.12 |
[React] setState는 왜 비동기 일까? (0) | 2023.01.12 |
[React] state를 직접 수정하지 않고 setState를 사용하는 이유 (0) | 2023.01.12 |
[React] lazy loading과 code splitting (0) | 2023.01.12 |