📌 React에서 페이지네이션과 유효성 검사 구현하기
2025. 2. 15. 18:57ㆍ프론트엔드/REACT
728x90
📌 React에서 페이지네이션과 유효성 검사 구현하기
React 프로젝트에서 페이지네이션과 유효성 검사를 구현하는 방법을 정리해보겠습니다.
특히 FAQ 페이지의 페이지네이션과 비밀번호 유효성 검사를 예제로 다루겠습니다.
✅ 1. 페이지네이션(Pagination) 구현하기
페이지네이션은 많은 데이터를 여러 페이지로 나누어 표시하는 기능입니다.
React에서 useState와 Array.prototype.slice()를 활용하면 쉽게 구현할 수 있습니다.
🔹 구현 목표
- 한 번에 4개씩 FAQ를 보여줌
- "이전", "다음" 버튼 추가
- 첫 페이지에서는 "이전" 버튼 비활성화
- 마지막 페이지에서는 "다음" 버튼 비활성화
🔹 React 코드 예제
import React, { useEffect, useState } from 'react';
import instance from '../axiosConfig';
export const Faq = () => {
const [faqs, setFaqs] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const itemsPerPage = 4; // 한 페이지에 표시할 항목 수
useEffect(() => {
const fetchFaqs = async () => {
try {
const response = await instance.get('/faq/getAll');
if (response.status === 200 && Array.isArray(response.data.data)) {
setFaqs(response.data.data);
}
} catch (error) {
console.error("FAQ 데이터를 가져오는 중 오류 발생: ", error);
}
};
fetchFaqs();
}, []);
// 현재 페이지에 표시할 FAQ 데이터 계산
const indexOfLastItem = currentPage * itemsPerPage;
const indexOfFirstItem = indexOfLastItem - itemsPerPage;
const currentFaqs = faqs.slice(indexOfFirstItem, indexOfLastItem);
return (
<div>
<h2>FAQ</h2>
<div>
{currentFaqs.map((faq, index) => (
<div key={faq.id}>
<h3>{indexOfFirstItem + index + 1}. {faq.question}</h3>
<p>{faq.answer}</p>
</div>
))}
</div>
{/* 페이지네이션 버튼 */}
<div>
<button
onClick={() => setCurrentPage(currentPage - 1)}
disabled={currentPage === 1}
>
이전
</button>
<span>{currentPage} / {Math.ceil(faqs.length / itemsPerPage)}</span>
<button
onClick={() => setCurrentPage(currentPage + 1)}
disabled={indexOfLastItem >= faqs.length}
>
다음
</button>
</div>
</div>
);
};
export default Faq;
✅ 핵심 포인트
- useState를 사용하여 currentPage 상태를 관리
- slice()를 사용하여 현재 페이지의 데이터만 가져옴
- currentPage === 1일 때 "이전" 버튼 비활성화
- indexOfLastItem >= faqs.length일 때 "다음" 버튼 비활성화
✅ 2. 비밀번호 유효성 검사(Validation)
회원가입 또는 로그인 과정에서 비밀번호의 형식을 검증하는 것이 중요합니다.
이번 예제에서는 소문자 + 숫자 포함, 5~10자리 비밀번호를 입력하도록 유효성 검사를 적용해보겠습니다.
🔹 유효성 검사 조건
- 비밀번호는 5~10자리여야 함
- **소문자(a-z)**와 **숫자(0-9)**를 반드시 포함해야 함
- 비밀번호 확인(재입력)과 일치해야 버튼이 활성화됨
🔹 React 코드 예제
import React, { useState } from 'react';
import { useFeeStore } from '../../store';
function Password() {
const { name, studentId, password, setPassword } = useFeeStore();
const [confirmPassword, setConfirmPassword] = useState('');
// 비밀번호 검증 (소문자 + 숫자 포함, 5~10자리)
const isValidPassword = password.length >= 5 && password.length <= 10 && /[a-z]/.test(password) && /\d/.test(password);
// 비밀번호 확인
const isMatch = isValidPassword && password === confirmPassword;
const handleSubmit = async () => {
if (!isMatch) return;
const payload = {
name: name,
userStudnetId: studentId,
userPassword: password,
};
console.log(payload);
alert('회원가입 완료');
};
return (
<div>
<h2>비밀번호 설정</h2>
<div>
<label htmlFor="password">비밀번호</label>
<input
type="password"
id="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
/>
</div>
<div>
<label htmlFor="confirmPassword">비밀번호 확인</label>
<input
type="password"
id="confirmPassword"
value={confirmPassword}
onChange={(e) => setConfirmPassword(e.target.value)}
/>
</div>
<p>* 비밀번호는 소문자 + 숫자 포함 5~10자리여야 합니다.</p>
<button
style={{ backgroundColor: isMatch ? 'black' : '#d3d3d3', cursor: isMatch ? 'pointer' : 'not-allowed' }}
disabled={!isMatch}
onClick={handleSubmit}
>
다음
</button>
</div>
);
}
export default Password;
✅ 핵심 포인트
- 정규식(/[a-z]/ && /\d/)을 사용하여 소문자+숫자 포함 확인
- 비밀번호 길이가 5~10자리인지 체크
- 비밀번호와 비밀번호 확인이 일치하는지 확인
- 조건이 충족될 때만 버튼 활성화 (disabled={!isMatch} 적용)
🚀 마무리
이번 정리에서는 React에서 페이지네이션과 유효성 검사를 구현하는 방법을 배웠습니다.
✔️ 페이지네이션을 활용해 FAQ 목록을 4개씩 나누어 표시
✔️ 비밀번호 유효성 검사로 보안 강화
이제 실제 프로젝트에 적용해보세요! 🎯
질문이 있다면 댓글로 남겨주세요. 😊
728x90
'프론트엔드 > REACT' 카테고리의 다른 글
| React 관심사 선택 모달 개선하기 (3) | 2025.02.17 |
|---|---|
| React 모달에서 입력값을 "수정하기" 버튼을 눌러야 반영되도록 하기 (3) | 2025.02.17 |
| React에서 관심사(취미) 선택 모달 구현하기 (6) | 2025.02.16 |
| 🚀 React에서 공지사항(Notice) 페이징 최적화 & 성능 개선하기 (1) | 2025.02.15 |
| 🚀 React Query를 사용하여 FAQ 관리 성능 개선하기 (0) | 2025.02.15 |