1장 10~16
10. useRef 로 특정 DOM 선택하기
ref 가 뭔가?
React에서 DOM요소나 클래스형 컴포넌트에 직접 접근할수 있게 도와주는 기능 !
즉, 포인터 같은 역할
[useRef]
함수의 Hook 중 하나, 함수형 컴포넌트에서 사용되고 DOM 요소나 값을 저장할 때 사용됨.
렌더링 유발 X
Hook 이 먼지 몰랏다.
Hook 이란.. 클래스형 컴포넌트에서만 사용되던 상태 관리와 라이프사이클 메서드를 함수형 컴포넌트에서 간단하게 사용하게 만든것.
대표 훅 들... useState(상태 관리), useEffect(사이드 이펙트 관리), useRef(DOM 접근), useContext(전역 상태 관리)
★ 클래스형 컴포넌트 vs 함수형 컴포넌트
구분 | 클래스형 컴포넌트 | 함수형 컴포넌트 |
선언 방식 | ES6 클래스 기반 | 함수 기반 |
상태 관리 | this.state, this.setState() | useState |
라이프사이클 관리 | 여러 메서드 (componentDidMount 들) | useEffect 하나로 관리 |
코드 복잡성 | 복잡, 길어짐 | 간결, 직관적 |
this 키워드 필요 여부 | 필요 | 불필요 |
성능 | 무거움 | 가벼움 |
최신 React 지원 여부 | 지원하지만 권장하지 않음 | 최신 React에서 권장하는 방식 |
주요 사용 상황 | 기존 코드 유지보수, 복잡한 상태 관리 | 대부분의 신규 프로젝트, 간단한 상태 관리 |
InputSample.js 에 추가하기 !
const nameInput = useRef();
useRef()를 사용하여 Ref 객체 만듦
nameInput.current.focus();
.current 값은 DOM 가리킴
ref={nameInput}
ref 에서 DOM 요소와 ref 객체를 연결함
11. 배열 렌더링하기
※ map() 함수
배열 각 요소를 일정한 로직에 따라 변환하여 새로운 배열 생성하는 함수
arr.map(i => ) 의 형태로 하위 컴포넌트에게 값전달
코드에 map() 함수 추가 → 에러 !
해결방법 : key(고유값) 라는 props 설정해줘야함 , 만약 고유한 값 X : index
각 고유 원소에 key 가 있어야 배열 렌더링 Goooood.
map 에서 key가 필요한 이유!!!
- Map에 key 값이없다면 중간의 값이 바뀌었을때 그 하위 값들이 전부 변하기 때문인다. key값을 사용한다면 key를 이용해 중간의 값을 추가하게 됨
12. useRef 로 컴포넌트 안의 변수만들기
위에 10에서 배웠는데요. useRef의 두가지 용도 중 남은 한가지 컴포넌트 안 변수 관리 용도입니다.
useRef로 관리되는 변수는 값이 바뀌어도 컴포넌트가 리렌더링 X
13. 배열에 항목 추가하기
상태관리를 CreateUser 에서 하지 않고 부모 컴포넌트인 App 에서 하게 하고, input 의 값 및 이벤트로 등록할 함수들을 props 로 넘겨받아서 사용
※배열 변화줄 때
불변성 지켜줘야함 → 배열의 push, splice, sort 등의 함수사용 X. 만약에 사용해야 한다면, 기존의 배열 복사 후 사용
불변성을 지키면서 배열에 새 항목을 추가하는 방법
1. spread 연산자 사용
2. concat 함수 사용 : 기존 배열 수정 X , 새로운 원소가 추가된 새로운 배열 만듦
14. 배열에 항목 제거하기
이때도 불변성 유지 중요!
배열 항목 제거 방법 3가지
- filter() 함수 사용
조건에 맞지 않는 요소를 걸러내어 새로운 배열 반환 - splice() 함수 사용 (주의)
배열 자체 직접 수정 (불변성 해침) - slice() 함수 사용
부분 배열을 복사하여 새로운 배열 생성
- 앞부분과 뒷부분 합쳐서 새로운 배열 생성
- 불변성 유지하면서 특정 인덱스 제거
15. 배열에 항목 수정하기
16. useEffect를 사용하여 마운트/언마운트/업데이트시 할 작업 설정하기
useEffect 라는 Hook 을 사용하여 컴포넌트가 마운트 됐을 때 (처음 나타났을 때), 언마운트 됐을 때 (사라질 때), 그리고 업데이트 될 때 (특정 props가 바뀔 때) 특정 작업을 처리하는 방법
- 마운트 / 언마운트
useEffect 사용시 첫번째 파라미터 : 함수, 두번째 파라미터 : 배열 (deps)
함수 반환 가능 → cleanup 함수 : deps가 비어있는 경우 컴포넌트가 사라질 때 호출됨
마운트
- props 로 받은 값을 컴포넌트의 로컬 상태로 설정
- 외부 API 요청 (REST API 등)
- 라이브러리 사용 (D3, Video.js 등...)
- setInterval 을 통한 반복작업 혹은 setTimeout 을 통한 작업 예약
언마운트
- setInterval, setTimeout 을 사용하여 등록한 작업들 clear 하기 (clearInterval, clearTimeout)
- 라이브러리 인스턴스 제거
<deps에 특정 값 넣기>
특정값 넣으면, 컴포넌트가 처음 마운트 될때도 호출되고, 지정한 값이 바뀔때에도 호출됨.
useEffect 안에서 사용하는 상태나, props 가 있다면, useEffect 의 deps 에 넣어주어야 합니다.
<deps 파라미터를 생략하기>
생략하면, 컴포넌트가 리렌더링 될 때마다 호출됨.
- 화면이 처음 떴을때 실행.
- deps에 [] 빈배열을 넣을 떄.
- life cycle중 componentDidmount처럼 실행
- 화면이 사라질때 실행(clean up함수).
- componentWillUnmount처럼 실행
- deps에 넣은 파라미터값이 업데이트 됬을때 실행.
- componentDidUpdate처럼 실행.
'WINK-(Web & App) > React.js 스터디' 카테고리의 다른 글
[2025 1학기 React.js 스터디] 이상래 #5주차 (0) | 2025.05.21 |
---|---|
[2025 1학기 React.js 스터디] 이종민 #4주차 (0) | 2025.05.08 |
[2025 1학기 React.js 스터디] 강민지 #4주차 (0) | 2025.05.08 |
[2025 1학기 React.js 스터디] 최은희 #4주차 (0) | 2025.05.08 |
[2025 1학기 React.js 스터디] 이가인 #4주차 (0) | 2025.05.08 |