-
import { useState } from 'react';import { toast } from 'react-toastify';
const ReviewForm = () => {//Custom Hookconst initialState = {password: '',nickname: '',title: '',content: ''};const [formState, setFormState] = useState(initialState);
const { nickname, title, content, password } = formState;// console.log('nickname', nickname);// console.log('title', title);// console.log('content', content);// console.log('password', password);const onChangeHandler = (e) => {const { name, value } = e.target; //아래 return 태그에서 name,value값을 가지고 오는것//객체 6~9번째줄 가지고 오는것 [name]은 return부분name, value는 return문 아래 선언해준 value값을 가지고 오는것setFormState((prev) => ({ ...prev, [name]: value }));};
const onSubmitHandeler = (e) => {e.preventDefault();setFormState(initialState);toast.success('입력되었습니다');};
return (<form onSubmit={onSubmitHandeler}><input name="title" value={title} onChange={onChangeHandler} type="text" placeholder="제목을 입력해 주세요" /><textarea name="content" value={content} onChange={onChangeHandler} placeholder="내용을 입력해 주세요" /><input name="nickname" value={nickname} onChange={onChangeHandler} type="text" placeholder="닉네임 입력" /><input name="password" value={password} onChange={onChangeHandler} type="password" placeholder="패스워드 입력" /><button>입력하기</button></form>);};
export default ReviewForm;1. name, value onChange 연결해줌
2. 따로 hooks 폴더 생성, 안에 .js로 만들어준다.
import { useState } from 'react';
const detailForm = (initialState = {}) => {const [formState, setFormState] = useState(initialState);const onChangeHandler = (e) => {const { name, value } = e.target; //아래 return 태그에서 name,value값을 가지고 오는것//객체 6~9번째줄 가지고 오는것 [name]은 return부분name, value는 return문 아래 선언해준 value값을 가지고 오는것setFormState((prev) => ({ ...prev, [name]: value }));};
const resetForm = () => {setFormState(initialState);};
return { formState, onChangeHandler, resetForm };};
export default detailForm;따로 이렇게 만들어주고
3. 다시 import 해서 hoos안에 있는 .js를 불러와준다.
import { useState } from 'react';import { toast } from 'react-toastify';import detailForm from '../../components/hooks/detailForm';
const ReviewForm = () => {const { formState, onChangeHandler, resetForm } = detailForm({password: '',nickname: '',title: '',content: ''});
const { nickname, title, content, password } = formState;// console.log('nickname', nickname);// console.log('title', title);// console.log('content', content);// console.log('password', password);// const onChangeHandler = (e) => {// const { name, value } = e.target; //아래 return 태그에서 name,value값을 가지고 오는것// //객체 6~9번째줄 가지고 오는것 [name]은 return부분name, value는 return문 아래 선언해준 value값을 가지고 오는것// setFormState((prev) => ({ ...prev, [name]: value }));// };
const onSubmitHandeler = (e) => {e.preventDefault();resetForm();toast.success('입력되었습니다');};
return (<form onSubmit={onSubmitHandeler}><input name="title" value={title} onChange={onChangeHandler} type="text" placeholder="제목을 입력해 주세요" /><textarea name="content" value={content} onChange={onChangeHandler} placeholder="내용을 입력해 주세요" /><input name="nickname" value={nickname} onChange={onChangeHandler} type="text" placeholder="닉네임 입력" /><input name="password" value={password} onChange={onChangeHandler} type="password" placeholder="패스워드 입력" /><button>입력하기</button></form>);};
export default ReviewForm;'📚 이론정리 > React & Next.js' 카테고리의 다른 글
✏️ Next.js 의 App Router (0) 2024.03.09 Next 보일러플레이트 앱 라우터 폴더구조와 설치,Server컴포넌트, Client컴포넌트 (0) 2024.03.09 ✏️ 글로벌 스테이트와 fetch-policy (0) 2024.03.02 ✏️ Recoil 사용하기 (0) 2024.03.02 ✏️ Zustand (0) 2024.02.29 댓글