이번 강좌에서는 리액트를 사용하여 일기장 앱을 개발하는 두 번째 파트로, 주로 Editor 컴포넌트를 구현하는 과정을 살펴보겠습니다. Editor 컴포넌트는 사용자가 일기를 작성하는 데 필요한 입력 필드를 제공하고, 작성된 내용을 관리할 수 있도록 도와주는 중요한 역할을 합니다. 이번 글에서는 컴포넌트의 설계 및 구현 방식, 필요한 상태 관리 방법, 사용자 경험을 향상시키기 위한 다양한 기능 구현 등을 자세히 설명하겠습니다.
1. Editor 컴포넌트의 개요
Editor 컴포넌트는 일기장 앱의 핵심 구성 요소로, 다음과 같은 기능을 수행합니다:
- 사용자 입력을 받을 수 있는 텍스트 영역 제공
- 제목 및 본문을 입력받아 저장할 수 있는 기능
- 입력된 내용을 검증하고 오류 메시지를 제공
- 작성된 내용을 부모 컴포넌트에 전달하는 이벤트 핸들러
이러한 기능을 통해 사용자는 일기를 작성하고, 이를 저장하여 나중에 확인할 수 있습니다.
2. Editor 컴포넌트 설계
Editor 컴포넌트를 설계하기 전에 어떤 데이터가 필요할지를 결정해야 합니다. 컴포넌트에서 관리할 상태는 다음과 같습니다:
- 제목: 일기의 제목을 입력받는 상태
- 본문: 일기의 내용을 입력받는 상태
- 오류 메시지: 입력 검증 결과 오류 메시지를 저장하는 상태
각 상태는 useState
훅을 사용하여 관리합니다.
2.1 State 초기화
import React, { useState } from 'react';
const Editor = ({ onSave }) => {
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
const [error, setError] = useState(null);
// ...
};
2.2 Props 정의
Editor 컴포넌트는 onSave
라는 props를 통해 부모 컴포넌트에서 전달된 저장 핸들러를 받을 것입니다. 이 핸들러는 사용자가 일기를 작성하고 저장할 때 호출됩니다.
3. Input 처리
Editor에서 사용하는 입력 요소는 제목과 본문에 각각 텍스트 박스를 제공하는 두 개의 input
요소와 하나의 textarea
요소입니다. 입력이 이루어졌을 때 상태를 업데이트하도록 이벤트 핸들러를 설정합니다.
3.1 입력 이벤트 핸들러
const handleTitleChange = (event) => {
setTitle(event.target.value);
};
const handleContentChange = (event) => {
setContent(event.target.value);
};
3.2 Render Method
이제 상태와 이벤트 핸들러를 기반으로 Editor 컴포넌트가 어떻게 렌더링될지를 정의하겠습니다. 입력 필드와 저장 버튼을 포함한 JSX 구조는 다음과 같습니다:
return (
일기 작성
{error && {error}
}
);
4. 저장 기능 구현
사용자가 작성한 일기를 저장하기 위해, 저장 버튼 클릭 시 호출되는 handleSave
함수를 구현합니다. 이 함수는 입력값의 유효성을 검증하고, 문제가 없다면 부모 컴포넌트의 onSave
핸들러를 호출하는 로직을 포함합니다.
4.1 유효성 검사
const handleSave = () => {
if (!title || !content) {
setError('제목과 내용은 필수 항목입니다.');
return;
}
setError(null);
onSave({ title, content });
// 입력 초기화
setTitle('');
setContent('');
};
5. 통합: Editor 컴포넌트를 Parent에서 사용하기
저장 기능이 구현된 Editor 컴포넌트를 사용자 인터페이스의 다른 부분과 통합해야 합니다. 부모 컴포넌트에서는 Editor를 사용하여 작성한 일기를 저장하고 리스트에 추가하는 기능을 구현합니다.
import React, { useState } from 'react';
import Editor from './Editor';
const DiaryApp = () => {
const [entries, setEntries] = useState([]);
const handleSaveEntry = (entry) => {
setEntries([...entries, entry]);
};
return (
나의 일기장
{entries.map((entry, index) => (
-
{entry.title}
{entry.content}
))}
);
};
export default DiaryApp;
6. 마무리 및 추가 기능
이번 글에서는 리액트로 일기장 앱의 Editor 컴포넌트를 구현하는 과정에 대해 다루었습니다. 사용자가 일기를 작성하고 저장할 수 있는 기초적인 기능이 마련되었습니다. 추가적으로 다음과 같은 기능을 더 고려할 수 있습니다:
- 저장한 일기를 수정하는 기능
- 일기 삭제 기능
- 일기를 날짜별로 정렬하거나 필터링하는 기능
- 작성된 일기를 로컬 스토리지나 서버에 저장하는 기능
리액트를 사용하여 다양한 컴포넌트를 조합하고 상태 관리를 통해 상호작용하는 앱을 만드는 경험은 매우 유익합니다. 앞으로도 다양한 주제에 대한 공부와 도전을 계속하시기를 바랍니다!