useEffect도 react의 hook 중 하나다.
첫번째 렌더링만, 혹은 특정 변수가 바뀔때만 실행하고 싶을때 쓰는 것이다.
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
Effect hook은 함수 컴포넌트에서 side effect를 수행할 수 있다.
side effect라고 함은 데이터 가져오기, 구독(Subscription) 설정하기, 수동으로 React 컴포넌트의 DOM을 수정하는 것 들이 포함된다.
React 컴포넌트에는 일반적으로 두 종류의 side effect로 나눌 수 있다. 정리(clean-up)가 필요한 것과 그렇지 않는 것으로 나뉜다.
Clean-up 을 이용하지 않는 Effects
그럼 useEffect 가 하는 일은 뭐야?
useEffect를 컴포넌트 안에서 불러내는 이유가 뭔데?
useEffect는 렌더링 이후에 매번 수행되는건가?
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
}
count state 변수를 선언 한 뒤 react에게 effect를 사용한다고 말하고 있다.
import { useState } from "react"
import { useEffect } from "react"
const ToDoList = () => {
const [toDoArray, SetToDoArray] = useState([])
const addToDo = (e) => {
e.preventDefault()
SetToDoArray([...toDoArray, e.target.todo.value])
e.target.todo.value = ''
}
useEffect(() => {
console.log(toDoArray)
console.log('toDoArray 값 바뀜!')
},[toDoArray]
)
return (
<div>
<p>My To DO List</p>
<form onSubmit = {addToDo}>
<input
type='text'
name='todo'
style={{ boxShadow:' 0 0 4px #000'}}
/>
<button type="submit">add To Do</button>
</form>
{toDoArray.map((toDo) => (
<div key={toDo}>
<p>{toDo}</p>
</div>
))}
</div>
)
}
export default ToDoList