리액트 네이티브에서 가장 많이 쓰이는 훅들을 좀 정리하려고 한다.
잘알지는 못하지만 아는 선에서만 조금 정리를 해보자
useState는 컴포넌트의 상태를 관리하는데 사용된다. 상태가 변경되면 다시 렌더링된다.
import React, { useState } from 'react';
import { Text, Button, View } from 'react-native';
function Counter() {
const [count, setCount] = useState(0); // count라는 상태와, setCount라는 상태를 변경하는 함수가 생김
return (
<View>
<Text>Count: {count}</Text>
<Button title="Increase" onPress={() => setCount(count + 1)} />
</View>
);
}
위에 코드로 정리를 하자면
count : 컴포넌트에서 관리하고자 하는 상태 값을 나타낸다.
setCount : 상태를 변경할 수 있는 함수이다. 이 함수가 호출되면 상태가 변경되고 컴포넌트가 다시 렌더링된다.
useState(0) : 0은 상태의 초기값이다. 컴포넌트가 처음 렌더링될 때 이값으로 상태가 설정된다.
처음화면이 렌더링되면 0으로 시작해서, 버튼을 클릭해 setCount 함수가 작동하면
상태가 변경되어 재렌더링이 된다.
useState는 초기 상태값으로 기본 데이터타입 뿐만 아니라 함수나 객체도 사용할 수 있다.
const [count, setCount] = useState(0); // 숫자형 초기 값
const [name, setName] = useState(''); // 문자열 초기 값
const [isVisible, setIsVisible] = useState(false); // 불리언 초기 값
const [user, setUser] = useState({ name: 'John', age: 25 });
const [items, setItems] = useState([1, 2, 3]);
useState로 상태가 변경되면 리액트는 그 상태가 변경되었음을 감지하고, 해당 컴포넌트만 다시 렌더링한다.
가상 DOM 매커니즘에 따라, 변경된 부분만 다시 그려지기 때문에 성능이 최적화된다.
useState 요약
- useState는 함수형 컴포넌트에서 상태를 관리할 수 있게 해주는 기본 훅이다.
- setState 함수는 상태를 변경하고 컴포넌트를 리렌더링 하는 역할을 한다.
- 복잡한 객체나 배열을 관리할 때는 불변성을 유지하면서 상태를 업데이트해야한다.
- 상태 업데이트는 비동기적으로 처리된다.
useEffect는 부수효과(side effect)를 처리하기 위해 사용되는 훅이다.
부수효과란 컴포넌트가 리렌더링될 때마다 발생하는 비동기 작업이나 DOM 조작, 외부 데이터를 가져오는 등의 작업을 의미한다.
컴포넌트의 라이프사이클 메서드인 componentDidMount, componentDidUpdate, componentWillUnmount를 대체하는 역할을 한다.
useEffect(() => {
//부수효과 코드
},[의존성배열]);
useEffect(() => {
console.log('렌더링될 때마다 실행');
});
의존성 배열이 없는 경우, 컴포넌트가 렌더링될 때마다 useEffect가 실행됨, 상태나 props가 변경될 때마다 이 함수가 호출된다.
useEffect(() => {
console.log('마운트 시 한 번만 실행');
}, []); // 빈 배열
의존성 배열이 빈 배열이면, 컴포넌트가 마운트될 때 한번만 실행된다.
useEffect(() => {
console.log('name이 변경될 때만 실행');
}, [name]); // name 상태가 변경될 때만 실행
의존성 배열에 특정 값(name)이 있으면, 해당 값이 변경될 때만 부수효과가 실행된다.
이를 통해 필요할때만 부수효과 실행가능
useEffect 요약
- useEffect는 부수효과를 처리하는 훅으로, 컴포넌트가 렌더링되거나 업데이트 될 때 동작한다.
- 의존성 배열을 사용하여 특정 값이 변경될 때만 실행할 수 있도록 제어 가능
- API 호출 및 이벤트리스너 관리 등 작업에 많이 사용됨
이 또한 리액트에서 많이 쓰이는 훅 중 하나로, DOM 요소에 직접 접근하거나, 리렌더링과 관계없이 값을 유지하고 싶을때 사용된다.
이 훅은 참조(Reference)를 생성하며, 해당 참조값은 컴포넌트가 리렌더링되더라도 변하지 않고 유지하게 된다. 그렇기 때문에 DOM 조작이나 특정 값을 저장해두고 싶을 때 유용하다.
import React, { useRef } from 'react';
function TextInputWithFocusButton() {
const inputRef = useRef(null); // 초기값으로 null 설정
const handleButtonClick = () => {
// useRef를 사용해 input DOM 요소에 직접 접근하여 포커스 설정
inputRef.current.focus();
};
return (
<div>
<input ref={inputRef} type="text" />
<button onClick={handleButtonClick}>포커스 주기</button>
</div>
);
}
<input>의 ref속성에 inputRef를 할당한다.<input>요소를 가리키게 되며, 이를 통해 focus() 메서드를 호출하여 해당 <input>에 포커스를 줄 수 있다.useRef는 리렌더링과 관계없이 값을 유지할 수 있다. 컴포넌트가 렌더링 될 때마다 값이 변하지 않게 하려면 useRef를 사용할 수 있다. useRef의 current 값은 컴포넌트가 리렌더링 되어도 그대로 유지되며, 값을 변경해도 리렌더링을 유발하지 않는다.
import React, { useState, useRef } from 'react';
function Timer() {
const [count, setCount] = useState(0);
const countRef = useRef(0); // 초기값 0 설정
const incrementCount = () => {
countRef.current += 1; // current 값이 변경되어도 리렌더링되지 않음
console.log("Ref count:", countRef.current); // 콘솔에 current 값 출력
};
const updateCount = () => {
setCount(countRef.current); // 상태로 값을 업데이트 -> 리렌더링 발생
};
return (
<div>
<p>Count: {count}</p>
<button onClick={incrementCount}>Ref 값 증가</button>
<button onClick={updateCount}>상태 업데이트</button>
</div>
);
}
useRef 요약
- useRef는 DOM 요소나 리렌더링과 관계없는 값을 참조하는 데 사용된다.
- 값이 변경되어도 리렌더링을 유발하지 않으면서 상태를 저장할 수 있다.
- 포커스 관리,애니메이션제어, DOM접근, 이전 상태 기억 등에서 많이 사용된다.