Front-end/React
[React]리액트 useEffect 사용법
영벨롭
2022. 5. 29. 18:50
[ useEffect ]
import React, { useEffect } from "react";
useEffect(function, deps);
useEffect는 리액트 컴포넌트가 렌더링 될 때마다 특정 작업을 실행할 수 있도록 하는 Hook입니다.
첫 번째 인수로 수행하고자 하는 작업을 나타내는 함수를 전달하고, 두 번째 인수로는 검사하고자 하는 dependency 배열을 전달합니다.
[ deps X - 렌더링 될 때마다 실행 ]
useEffect(() => {
console.log("렌더링 될 때마다 한 번만 실행");
});
만약 deps 인수를 전달하지 않는다면, useEffect 는 해당 컴포넌트가 렌더링 될 때마다 작업을 수행합니다.
다음 코드는 deps 를 전달하지 않았기 때문에, + 또는 - 버튼이 눌릴 때마다 state 가 변경되기 때문에 useEffect 내의 함수가 작동하는 것을 확인할 수 있습니다.
import React, { useState, useEffect, useRef, useMemo } from 'react';
import UserList from './UserList';
import AddUser from './AddUser';
const App = () => {
const [number, setNumber] = useState(0);
useEffect(()=>{
console.log(number)
})
const onClick = (e) => {
if(e.target.id === 'plus'){
setNumber(number + 1)
}else{
setNumber(number - 1)
}
}
return (
<div>
<button type="button" onClick={onClick} id="plus">+</button>
<span> {number} </span>
<button type="button" onClick={onClick} id="minus">-</button>
</div>
);
};
export default App;
[ deps가 빈 배열 - 맨 처음 렌더링 될 때 한 번만 실행 ]
useEffect(() => {
console.log("맨 처음 렌더링 될 때 한 번만 실행");
}, []);
만약 deps 가 빈 배열이면, 해당 컴포넌트가 맨 처음 렌더링 될 때 한 번만 특정 작업을 수행합니다.
위 코드에서 deps를 빈 배열로 전달하면, 버튼을 눌러도 맨 처음 렌더링 될 때 한번만 작동하므로 콘솔에는 한 번만 출력되는 것을 확인할 수 있습니다.
...
useEffect(()=>{
console.log(number)
}, [])
...
[ deps가 특정 값 - 특정 props나 state가 바뀔 때 실행 ]
useEffect(() => {
console.log("특정 props나 state가 바뀔 때 실행");
}, [값]);
deps에 특정 값을 전달하면 해당 값이 변화할 때마다 동작합니다.
...
useEffect(()=>{
console.log(number)
}, [number])
...
반응형