지난 글에서 한 회원가입 기능에 간단하게 두 번째 훅인 useEffect를 이용해 기능을 추가해보자.
보통 우리가 뭔가를 입력하고 form을 submit 하면 잠시간은 submit 버튼이 disabled 상태가 된다.
이를 useEffect 훅을 통해 구현할 수 있다.
useEffect는 컴포넌트가 렌더링 될 때마다 특정 작업을 수행하도록 해주는 훅이다.
클래스 컴포넌트의 componentDidMount, componentDidUpdate를 합친 기능이라고 생각하면 된다.
useEffect 또한 react 내장 훅이므로 첫 줄에 다음과 같이 useEffect를 import 해오자.
/* practice/src/Form/Form.jsx */
import React, { useState, useEffect } from 'react'
Form 함수 안에 다음과 같이 submit 값을 바꾸는 함수를 선언해보자.
/* practice/src/Form/Form.jsx */
const [submit, setSubmit] = useState(false)
<input type='submit' value='submit' disabled={submit}/>
// 다음과 같이 submit의 input element에는 disabled 추가
submit 버튼을 누르면 잠시 버튼이 비활성화되도록 submitHandler에 setSubmit 함수를 추가한다.
/* practice/src/Form/Form.jsx */
const submitHandler = (e) =>{
e.preventDefault()
setSubmit(true)
const input = {
userid: id.userInfo,
userpw: pw.userInfo
}
setErrors(validate(input))
}
이제 useEffect를 사용해 컴포넌트의 변화에 대응해 submit 버튼을 다시 false로 바꿔주는 함수를 만들어보자,
/* practice/src/Form/Form.jsx */
useEffect (
() => {
if(submit) {
console.log('request sent')
if(Object.keys(errors).length === 0 ) {
alert('가입 성공')
}
}
setSubmit(false)
}
)
이제 컴포넌트가 변화하면 useEffect의 함수가 발동해 setSubmit 함수로 submit 값을 false로 바꿔줄 것이다.
그런데 이러면 어떤 컴포넌트가 바뀌어도 useEffect가 발동된다는 문제가 있다.
우리가 input에 뭔가를 입력해 그 컴포넌트가 변해도 useEffect의 함수가 동일하게 발동한다.
함수에 2번째 인자로 특정 컴포넌트나 값을 넣어 그 값의 변화만을 감지해 발동하게끔 조건을 달 수 있다.
여기서는 errors의 변화만을 감지하게끔 할 것이다.
/* practice/src/Form/Form.jsx */
useEffect(
() => {
if(submit) {
console.log('request sent')
if(Object.keys(errors).length === 0 ) {
alert('가입 성공')
}
}
setSubmit(false)
},
[errors]
)
이렇게 하고 submit 버튼을 클릭했을 때만 변화를 감지해 useEffect가 발동된다.
'React' 카테고리의 다른 글
#13 useReducer (0) | 2022.05.01 |
---|---|
#12 useContext (0) | 2022.04.29 |
#10 함수형 컴포넌트 1. intro, useState (0) | 2022.04.29 |
#9 댓글 기능 만들기 part2 (0) | 2022.04.24 |
#8 댓글 기능 만들기 part1 (0) | 2022.04.24 |