리액트 강좌: To Do 앱 예제, 프로젝트 준비하기

React는 Facebook이 개발한 라이브러리로, 사용자 인터페이스를 구축하는 데 사용됩니다. 리액트를 이용하여 효율적이고 재사용 가능한 UI 컴포넌트를 만들 수 있습니다. 본 강좌에서는 To Do 앱을 예제로 사용하여 리액트를 이용한 프로젝트 준비하는 방법을 배우게 됩니다. 이 강좌를 통해 리액트의 기본 개념과 프로젝트를 준비하는 과정에 대해 자세히 알아보도록 하겠습니다.

1. 프로젝트 개요

To Do 앱은 사용자가 할 일을 추가하고 삭제할 수 있는 간단한 애플리케이션입니다. 본 앱을 통해 다음과 같은 기능을 구현하게 됩니다:

  • 할 일 추가 기능
  • 할 일 삭제 기능
  • 할 일 완료 표시 기능
  • 할 일 필터링 기능 (모두, 진행중, 완료)

이 프로젝트는 리액트를 처음 접하는 개발자들에게 좋은 연습이 될 것입니다. 단계별로 진행하면서 다양한 리액트 개념을 익힐 수 있습니다.

2. 개발 환경 설정

To Do 앱을 개발하기 위해서는 먼저 개발 환경을 설정해야 합니다. 아래의 단계에 따라 진행해 주세요.

2.1 Node.js 설치

React는 Node.js 환경에서 실행됩니다. Node.js가 설치되어 있지 않다면, 다음 링크에서 다운로드하여 설치합니다: Node.js 공식 사이트. 설치가 완료된 후, 아래의 명령어로 Node.js가 잘 설치되었는지 확인합니다.

node -v
npm -v

2.2 Create React App 사용

React 프로젝트를 빠르게 설정하기 위해 Create React App을 사용합니다. 아래의 명령어로 새로운 프로젝트를 생성합니다.

npx create-react-app todo-app

위 명령어는 `todo-app`이라는 이름의 새로운 리액트 프로젝트를 생성합니다. 생성이 완료된 후 해당 디렉토리로 이동합니다.

cd todo-app

2.3 프로젝트 구조 이해하기

생성된 리액트 프로젝트에는 기본적으로 여러 폴더와 파일이 생성됩니다. 주요 폴더 구조는 다음과 같습니다:

  • node_modules: 프로젝트의 의존성이 저장되는 폴더입니다.
  • public: 정적 파일이 저장되는 폴더입니다.
  • src: 리액트 컴포넌트와 앱의 주요 로직이 들어가는 폴더입니다.
  • package.json: 프로젝트의 메타 정보를 담고 있는 파일입니다.

3. To Do 앱 구현하기

이제 본격적으로 To Do 앱을 구현해보겠습니다. 다음 단계들을 따라가며 코드를 작성해보세요.

3.1 App 컴포넌트 만들기

`src` 폴더 안에 `App.js` 파일을 열어서 아래와 같이 수정합니다.


import React, { useState } from 'react';
import './App.css';

function App() {
    const [todos, setTodos] = useState([]);
    const [inputValue, setInputValue] = useState('');

    const addTodo = () => {
        if (inputValue.trim()) {
            setTodos([...todos, { text: inputValue, completed: false }]);
            setInputValue('');
        }
    };

    return (
        

To Do List

setInputValue(e.target.value)} placeholder="할 일을 입력하세요" />
    {todos.map((todo, index) => (
  • {todo.text}
  • ))}
); } export default App;

3.2 할 일 삭제 기능 추가하기

이제 각 할 일을 삭제할 수 있는 기능을 추가해보겠습니다. `addTodo` 함수 아래에 아래의 함수를 추가합니다.


const removeTodo = (index) => {
    setTodos(todos.filter((_, i) => i !== index));
};

그리고 `

  • ` 태그 안에 삭제 버튼을 추가합니다.
  • 
    {todos.map((todo, index) => (
        
  • {todo.text}
  • ))}

    3.3 완료 표시 기능 추가하기

    사용자가 할 일을 완료 상태로 변경할 수 있는 기능도 추가해보겠습니다. 먼저, 할 일 항목의 상태를 업데이트하는 함수를 추가합니다.

    
    const toggleComplete = (index) => {
        const newTodos = [...todos];
        newTodos[index].completed = !newTodos[index].completed;
        setTodos(newTodos);
    };
    

    그 다음, `

  • ` 태그에 완료 시 스타일을 추가하고 클릭 시 변경되도록 합니다.
  • 
    
  • toggleComplete(index)}> {todo.text}
  • 3.4 필터링 기능 추가하기

    마지막으로 할 일을 필터링할 수 있는 기능을 추가하겠습니다. 필터 상태를 관리하기 위해 상태 변수를 추가합니다.

    
    const [filter, setFilter] = useState('all');
    

    아래의 조건문을 사용하여 할 일 목록을 필터링합니다.

    
    const filteredTodos = todos.filter(todo => {
        if (filter === 'completed') return todo.completed;
        if (filter === 'active') return !todo.completed;
        return true;
    });
    

    마지막으로 필터 버튼을 추가하여 사용자가 선택할 수 있게 합니다.

    
    
    
    
    
      {filteredTodos.map((todo, index) => (
    • toggleComplete(index)}> {todo.text}
    • ))}

    4. 마무리 및 배포

    To Do 앱의 모든 기능을 구현하였습니다. 마지막으로 앱을 테스트한 후, 배포를 진행할 차례입니다.

    4.1 앱 테스트하기

    로컬에서 앱을 실행하여 기능이 잘 작동하는지 확인합니다. 아래의 명령어로 로컬 서버를 시작합니다.

    npm start

    4.2 배포하기

    앱이 잘 작동하면, 이제 배포할 차례입니다. 여러 배포 옵션이 있지만, Create React App이 제공하는 `build` 명령어를 사용하여 최적화된 코드를 생성할 수 있습니다.

    npm run build

    생성된 `build` 폴더를 서버에 업로드하거나, Netlify, Vercel과 같은 플랫폼을 사용하여 배포할 수 있습니다.

    5. 결론

    이제 리액트를 사용하여 간단한 To Do 앱을 만들어 보았습니다. 이 과정을 통해 리액트의 핵심 개념과 앱 개발의 기본 프로세스를 이해할 수 있었습니다. 앞으로 더욱 복잡한 애플리케이션을 개발할 수 있는 기반이 되었기를 바랍니다.

    추가적으로 이 프로젝트에 기능을 더하거나 디자인을 수정하여 더 발전된 버전을 만들어보는 것도 좋은 연습이 될 것입니다. 리액트를 응용하여 다른 프로젝트도 시도해 보세요!

    리액트 강좌: To Do 앱 예제, UI 구현하기

    안녕하세요. 이번 글에서는 리액트로 To Do 앱을 만드는 방법에 대해 알아보겠습니다. 이 강좌에서는 UI/UX 설계와 함께 기능 구현까지 다룰 것입니다. 리액트는 컴포넌트 기반의 자바스크립트 라이브러리로, 동적인 사용자 인터페이스를 쉽게 만들 수 있도록 도와줍니다.

    프로젝트 준비하기

    시작하기 전에, 프로젝트의 기본 설정을 해야 합니다. 다음과 같은 과정으로 개발 환경을 구축할 수 있습니다.

    npx create-react-app my-todo-app

    위 명령어를 실행하면 my-todo-app이라는 폴더에 리액트 앱의 기본 템플릿이 생성됩니다. 생성된 폴더로 이동하고 앱을 실행해 보겠습니다.

    cd my-todo-app
    npm start

    브라우저에서 http://localhost:3000에 접속하면 기본 리액트 앱이 실행되는 것을 볼 수 있습니다.

    컴포넌트 구조 설계하기

    To Do 앱의 기본적인 기능은 할 일을 추가하고, 완료 상태를 토글하며, 삭제하는 것입니다. 아래와 같은 컴포넌트 구조를 설계할 수 있습니다.

    • App: 애플리케이션의 루트 컴포넌트
    • TodoList: 할 일 목록을 표시하는 컴포넌트
    • TodoItem: 각 할 일 항목을 표시하는 컴포넌트
    • AddTodo: 할 일을 추가하는 폼 컴포넌트

    컴포넌트 구현하기

    이제 각 컴포넌트를 구현해 보겠습니다.

    1. App 컴포넌트

    먼저 App.js 파일을 열어 기본 상태를 정의해 보겠습니다.

    import React, { useState } from 'react';
    import TodoList from './components/TodoList';
    import AddTodo from './components/AddTodo';
    
    const App = () => {
        const [todos, setTodos] = useState([]);
    
        const addTodo = (todo) => {
            setTodos([...todos, todo]);
        };
    
        const toggleComplete = (index) => {
            const newTodos = todos.map((todo, i) => {
                if (i === index) {
                    return { ...todo, completed: !todo.completed };
                }
                return todo;
            });
            setTodos(newTodos);
        };
    
        const deleteTodo = (index) => {
            const newTodos = todos.filter((_, i) => i !== index);
            setTodos(newTodos);
        };
    
        return (
            <div className="App">
                <h1>To Do List</h1>
                <AddTodo addTodo={addTodo} />
                <TodoList todos={todos} toggleComplete={toggleComplete} deleteTodo={deleteTodo} />
            </div>
        );
    };
    
    export default App;

    2. TodoList 컴포넌트

    다음으로 TodoList.js를 구현합니다. 이 컴포넌트는 할 일 목록을 렌더링합니다.

    import React from 'react';
    import TodoItem from './TodoItem';
    
    const TodoList = ({ todos, toggleComplete, deleteTodo }) => {
        return (
            <ul>
                {todos.map((todo, index) => (
                    <TodoItem 
                        key={index} 
                        todo={todo} 
                        toggleComplete={() => toggleComplete(index)} 
                        deleteTodo={() => deleteTodo(index)} 
                    />
                ))}
            </ul>
        );
    };
    
    export default TodoList;

    3. TodoItem 컴포넌트

    이제 각 할 일 항목을 표현하는 TodoItem.js를 작성합니다.

    import React from 'react';
    
    const TodoItem = ({ todo, toggleComplete, deleteTodo }) => {
        return (
            <li style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>
                {todo.text}
                <button onClick={toggleComplete}>완료</button>
                <button onClick={deleteTodo}>삭제</button>
            </li>
        );
    };
    
    export default TodoItem;

    4. AddTodo 컴포넌트

    마지막으로, 할 일을 추가하는 폼을 구현합니다.

    import React, { useState } from 'react';
    
    const AddTodo = ({ addTodo }) => {
        const [inputValue, setInputValue] = useState('');
    
        const handleSubmit = (e) => {
            e.preventDefault();
            if (inputValue.trim()) {
                addTodo({ text: inputValue, completed: false });
                setInputValue('');
            }
        };
    
        return (
            <form onSubmit={handleSubmit}>
                <input 
                    type="text" 
                    value={inputValue} 
                    onChange={(e) => setInputValue(e.target.value)} 
                    placeholder="할 일을 입력하세요" 
                />
                <button type="submit">추가</button>
            </form>
        );
    };
    
    export default AddTodo;

    스타일링 추가하기

    이제 기본적인 기능이 구현되었으니, CSS를 사용해 UI를 더욱 아름답게 꾸며봅시다. App.css 파일에 다음의 스타일을 추가합니다.

    body {
        font-family: 'Arial', sans-serif;
        background-color: #f4f4f4;
    }
    
    .App {
        max-width: 600px;
        margin: 50px auto;
        padding: 20px;
        background: white;
        border-radius: 8px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    }
    
    h1 {
        text-align: center;
    }
    
    form {
        display: flex;
        justify-content: space-between;
        margin-bottom: 20px;
    }
    
    input[type="text"] {
        flex: 1;
        padding: 10px;
        border: 1px solid #ccc;
        border-radius: 4px;
    }
    
    button {
        padding: 10px 15px;
        margin-left: 10px;
        border: none;
        border-radius: 4px;
        background: #4A90E2;
        color: white;
        cursor: pointer;
    }
    
    button:hover {
        background: #357ABD;
    }
    
    ul {
        list-style-type: none;
        padding: 0;
    }

    테스트 및 배포

    이제 앱이 완성되었으니, 테스트 및 배포를 진행할 수 있습니다. npm run build 명령어를 통해 프로덕션 빌드를 생성할 수 있습니다.

    npm run build

    생성된 build 폴더를 서버에 배포하면 여러분의 To Do 앱이 세상에 선보이게 됩니다.

    결론

    이번 강좌에서는 리액트를 사용하여 기본적인 To Do 앱을 구현해보았습니다. 리액트의 컴포넌트 기반 아키텍처와 상태 관리를 활용하여 효율적으로 UI를 구축할 수 있었습니다. 다음에는 더 복잡한 기능 추가나 상태 관리 라이브러리인 Redux를 사용해보는 것도 추천드립니다.

    리액트를 통한 프로젝트 개발은 반복과 개선의 과정입니다. 계속해서 학습하고 실습하여 여러분만의 멋진 애플리케이션을 만들어보세요!

    리액트 강좌: To Do 앱 예제, Update: 할 일 수정하기

    이번 강좌에서는 리액트를 사용하여 간단한 To Do 앱을 만들어 보겠습니다. 이 강좌에서는 할 일을 수정하는 기능을 추가하는 방법에 대해 깊이 있게 다룰 것입니다. 리액트를 처음 사용하는 분들도 이해할 수 있도록 기초부터 차근차근 설명할 예정이니 걱정하지 마세요.

    1. 리액트 소개

    리액트는 사용자 인터페이스를 구축하기 위한 JavaScript 라이브러리입니다. 페이스북에서 개발하였으며, 하나의 페이지에서 동적인 웹 애플리케이션을 쉽게 만들 수 있도록 도와줍니다. 리액트의 가장 큰 장점 중 하나는 컴포넌트 기반 구조입니다. 이로 인해 코드의 재사용성이 높아지고, 유지보수가 용이해집니다.

    1.1 컴포넌트

    리액트에서 모든 것은 컴포넌트로 이루어져 있습니다. 컴포넌트는 화면의 일부를 구성하는 독립적인 블록으로 생각할 수 있습니다. 각 컴포넌트는 자체의 상태(State)와 속성(Props)을 가질 수 있으며, 이를 통해 상위 컴포넌트와 데이터를 주고받을 수 있습니다.

    2. To Do 앱 기본 구조 설정

    처음에는 To Do 앱의 기본 구조를 설정할 것입니다. 아래의 단계를 따라 진행해 보세요.

    2.1 프로젝트 생성

    npx create-react-app todo-app

    위 명령어를 통해 새로운 리액트 프로젝트를 생성합니다. todo-app이라는 폴더 안에 필요한 파일이 생성될 것입니다.

    2.2 기본 컴포넌트 구조 만들기

    src 폴더 안에 Todo.js 파일을 생성하고, 아래와 같이 기본 구조를 작성합니다.

    import React, { useState } from 'react';
    
    const Todo = () => {
        const [todos, setTodos] = useState([]);
        const [inputValue, setInputValue] = useState('');
    
        const handleAdd = () => {
            if (!inputValue) return;
            setTodos([...todos, { text: inputValue, isEditing: false }]);
            setInputValue('');
        };
    
        return (
            

    할 일 목록

    setInputValue(e.target.value)} />
      {todos.map((todo, index) => (
    • {todo.text}
    • ))}
    ); }; export default Todo;

    3. 할 일 수정 기능 추가하기

    이제 To Do 앱에 할 일 수정 기능을 추가해 보겠습니다. 사용자가 할 일을 클릭했을 때 해당 항목을 수정할 수 있도록 구현할 것입니다.

    3.1 상태 관리 추가

    상태 관리 기능을 추가하기 위해, 각 할 일 항목에 대해 편집 모드를 추가해야 합니다. Todo.js 파일을 아래와 같이 수정합니다.

    const handleEdit = (index) => {
        const updatedTodos = todos.map((todo, idx) => {
            if (idx === index) {
                return { ...todo, isEditing: !todo.isEditing };
            }
            return todo;
        });
        setTodos(updatedTodos);
    };
    
    const handleUpdate = (index, newText) => {
        const updatedTodos = todos.map((todo, idx) => {
            if (idx === index) {
                return { text: newText, isEditing: false };
            }
            return todo;
        });
        setTodos(updatedTodos);
    };

    3.2 수정하는 UI 만들기

    이제 수정하는 UI를 작성하여 사용자가 쉽게 할 일을 수정할 수 있도록 해야 합니다. 아래 코드를 return 문 안에 붙여넣습니다.

    {todos.map((todo, index) => (
        
  • {todo.isEditing ? (
    handleUpdate(index, e.target.value)} />
    ) : (
    handleEdit(index)}>{todo.text}
    )}
  • ))}

    3.3 전체 코드

    이제 전체 코드는 다음과 같습니다.

    import React, { useState } from 'react';
    
    const Todo = () => {
        const [todos, setTodos] = useState([]);
        const [inputValue, setInputValue] = useState('');
    
        const handleAdd = () => {
            if (!inputValue) return;
            setTodos([...todos, { text: inputValue, isEditing: false }]);
            setInputValue('');
        };
    
        const handleEdit = (index) => {
            const updatedTodos = todos.map((todo, idx) => {
                if (idx === index) {
                    return { ...todo, isEditing: !todo.isEditing };
                }
                return todo;
            });
            setTodos(updatedTodos);
        };
    
        const handleUpdate = (index, newText) => {
            const updatedTodos = todos.map((todo, idx) => {
                if (idx === index) {
                    return { text: newText, isEditing: false };
                }
                return todo;
            });
            setTodos(updatedTodos);
        };
    
        return (
            

    할 일 목록

    setInputValue(e.target.value)} />
      {todos.map((todo, index) => (
    • {todo.isEditing ? (
      handleUpdate(index, e.target.value)} />
      ) : (
      handleEdit(index)}>{todo.text}
      )}
    • ))}
    ); }; export default Todo;

    4. 마무리

    축하합니다! 이제 리액트를 사용하여 To Do 앱을 만들고, 할 일을 수정하는 기능까지 추가했습니다. 이 강좌를 통해 리액트의 기본 개념을 이해하고, 실습을 통해 코드를 작성하는 방법을 학습하셨습니다. 향후에는 더 복잡한 상태 관리나 다양한 라이브러리와의 연동을 통해 더욱 많은 기능을 추가해 보세요.

    5. 다음 강좌 예고

    다음 강좌에서는 To Do 앱에 추가 기능을 더 추가하거나, 리액트 Router를 활용하여 페이지를 관리하는 방법에 대해 다룰 예정입니다. 많은 기대 부탁드립니다!

    리액트 강좌: To Do 앱 예제 – 할 일 리스트 렌더링하기

    작성자: 조광형

    작성일: 2024년 11월 26일

    서론

    최근 몇 년 동안 리액트(React)는 웹 개발 분야에서 가장 인기 있는 라이브러리 중 하나로 자리잡았습니다. 사용자 인터페이스를作成하고 관리하는 데 매우 유용하며, 컴포넌트 기반 아키텍처 덕분에 코드의 재사용성과 유지보수성을 높일 수 있습니다. 이 글에서는 리액트를 사용하여 간단한 할 일(To Do) 리스트 애플리케이션을 만들어봅니다. 본 강좌의 첫 번째 장에서는 리스트를 렌더링하는 방법에 대해 알아보겠습니다.

    1. 개발 환경 설정

    리액트로 개발을 시작하기 전에, 먼저 개발 환경을 설정해야 합니다. 아래 단계에 따라 진행해보세요.

    1. Node.js 설치:

      리액트를 사용하기 위해서는 Node.js가 필요합니다. Node.js 공식 사이트에서 최신 버전을 다운로드하여 설치하세요.

    2. Create React App 설치:

      Create React App은 리액트 프로젝트를 쉽게 시작할 수 있도록 도와주는 도구입니다. 터미널을 열고 아래 명령어를 입력하여 설치합니다.

      npx create-react-app todo-app

      이 명령어를 실행하면 `todo-app`이라는 폴더가 생성되며, 기본적인 리액트 프로젝트가 설정됩니다.

    3. 프로젝트 폴더로 이동:

      아래 명령어를 입력하여 프로젝트 폴더로 이동합니다.

      cd todo-app
    4. 개발 서버 실행:

      개발 서버를 실행하여 리액트 애플리케이션을 확인할 수 있습니다. 아래 명령어를 입력하세요.

      npm start

      브라우저에서 http://localhost:3000을 열면 기본 리액트 애플리케이션이 나타납니다.

    2. 기본 구조 이해하기

    리액트의 구성 요소는 컴포넌트입니다. 각각의 컴포넌트는 UI의 일부를 정의하며, 상태(state)와 속성(props)을 가지게 됩니다.

    이제 우리는 할 일 리스트를 렌더링할 컴포넌트를 작성할 것입니다.

    3. To Do 컴포넌트 만들기

    우선 `src` 폴더 안에 `Todo.js`라는 파일을 생성합니다. 이 파일 내에서 할 일 항목을 렌더링할 컴포넌트를 만들어보겠습니다.

    
    // Todo.js
    import React from 'react';
    
    function Todo({ todo }) {
        return (
            

    {todo.text}

    완료 여부: {todo.completed ? '완료' : '미완료'}

    ); } export default Todo;

    위의 코드는 `Todo`라는 컴포넌트를 정의합니다. 이 컴포넌트는 속성으로 `todo`를 받고, 해당 항목의 텍스트와 완료 여부를 렌더링합니다.

    4. Todo 리스트 렌더링하기

    이제 실제로 할 일 리스트를 렌더링하는 컴포넌트를 만들어보겠습니다. `App.js`파일을 수정하여 할 일 리스트를 보이게 할 것입니다.

    
    // App.js
    import React from 'react';
    import Todo from './Todo';
    
    const todoList = [
        { text: '리액트 기본 배우기', completed: false },
        { text: '리액트 프로젝트 만들기', completed: false },
        { text: '리액트 앱 배포하기', completed: true },
    ];
    
    function App() {
        return (
            

    할 일 목록

    {todoList.map((todo, index) => ( ))}
    ); } export default App;

    위 코드에서 `todoList` 배열은 렌더링할 할 일 목록을 저장합니다. `map` 메서드를 사용하여 각 `todo` 항목을 렌더링하고, `Todo` 컴포넌트를 호출하여 해당 항목의 세부 정보를 출력합니다.

    5. 스타일링 추가하기

    애플리케이션이 조금 더 보기 좋게 만들기 위해 CSS 스타일을 추가합니다. `App.css` 파일을 열고 다음 스타일을 추가합니다.

    
    .todo {
        border: 1px solid #ccc;
        padding: 10px;
        margin: 10px 0;
        border-radius: 5px;
        background-color: #f9f9f9;
    }
    
    .App {
        max-width: 600px;
        margin: 0 auto;
        padding: 20px;
        font-family: Arial, sans-serif;
    }
    
    h1 {
        text-align: center;
    }
                

    위의 스타일을 통해 각 할 일 항목에 패딩과 마진을 추가하여 시각적으로 분리하였고, 중앙정렬 및 폰트 스타일도 설정하였습니다.

    6. 결론

    본 강좌에서는 리액트를 사용하여 간단한 할 일 리스트 앱을 만들고, 리스트 항목을 렌더링하는 방법에 대해 알아보았습니다. 여러분은 이제 기본적인 리액트 컴포넌트를 이해하고, 이를 통해 데이터를 사용자에게 표시하는 방법을 배웠습니다. 이후 강좌에서는 상태 관리와 추가 기능 구현에 대해 다룰 것입니다.

    리액트를 배우는 여정은 계속됩니다. 다음 강좌에서는 할 일을 추가하고 삭제하는 기능을 개발하여 더욱 풍성한 애플리케이션을 만들어보겠습니다.

    리액트 강좌: To Do 앱 예제 – 1부: 할 일 추가하기

    안녕하세요! 이번 포스트에서는 리액트를 사용하여 간단한 To Do 앱을 만들면서 할 일 추가 기능을 구현하는 방법에 대해 자세히 알아보겠습니다. 이 강좌는 리액트에 대한 기초 지식이 있는 분들을 위해 작성되었으며, 중급자 및 고급자에게도 유용한 정보를 제공할 것입니다. 리액트의 기초부터 시작하여 단계별로 앱을 완성해 나가는 과정에 대해 설명드리겠습니다.

    1. 리액트 소개

    리액트(React)는 사용자 인터페이스를 구축하기 위한 자바스크립트 라이브러리로, 페이스북에서 개발하였습니다. 리액트는 재사용 가능한 UI 컴포넌트를 만들어 효율적으로 웹 애플리케이션을 구축할 수 있도록 도와줍니다.

    2. 프로젝트 설정

    To Do 앱을 만들기 위해, 먼저 리액트로 새 프로젝트를 설정하겠습니다. 다음의 단계를 따라 해보세요:

    npx create-react-app todo-app

    위의 명령어를 터미널에 입력하면, 리액트 앱의 기본 구조가 생성됩니다. 생성된 디렉토리로 이동하려면 다음 명령어를 입력합니다:

    cd todo-app

    3. 필요한 패키지 설치

    우리의 To Do 앱에는 사용자가 할 일을 입력하고 추가할 수 있는 폼이 필요합니다. 이를 위해 useStateuseEffect 훅을 사용할 것입니다. 별도로 설치할 패키지는 필요하지 않지만, 프로젝트를 좀 더 개선하기 위해 추가적인 라이브러리를 사용해 볼 수 있습니다.

    4. 기본 구조 세팅

    src 디렉토리 내부에 components라는 폴더를 만들고, 그 안에 TodoList.jsAddTodo.js라는 두 개의 컴포넌트 파일을 생성합니다.

    TodoList.js

    import React from 'react';
    
    const TodoList = ({ todos }) => {
        return (
            

    할 일 목록

      {todos.map((todo, index) => (
    • {todo}
    • ))}
    ); } export default TodoList;

    AddTodo.js

    import React, { useState } from 'react';
    
    const AddTodo = ({ addTodo }) => {
        const [inputValue, setInputValue] = useState('');
    
        const handleChange = (e) => {
            setInputValue(e.target.value);
        }
    
        const handleSubmit = (e) => {
            e.preventDefault();
            if (inputValue) {
                addTodo(inputValue);
                setInputValue('');
            }
        }
    
        return (
            
    ); } export default AddTodo;

    App.js 수정

    제공된 TodoList 및 AddTodo 컴포넌트를 App.js에 추가하겠습니다. 아래와 같이 내용을 수정합니다:

    import React, { useState } from 'react';
    import TodoList from './components/TodoList';
    import AddTodo from './components/AddTodo';
    
    const App = () => {
        const [todos, setTodos] = useState([]);
    
        const addTodo = (todo) => {
            setTodos([...todos, todo]);
        }
    
        return (
            

    할 일 목록 앱

    ); } export default App;

    5. 앱 실행하기

    이제 앱을 실행해보겠습니다. 개발 서버를 실행하려면 다음 명령어를 입력합니다:

    npm start

    브라우저에서 localhost:3000으로 이동하면, 할 일 목록 추가 기능이 있는 간단한 To Do 앱이 나타나는 것을 확인할 수 있습니다.

    6. 기능 확장하기

    우리는 기본적인 할 일 추가 기능을 구현했습니다. 이제 몇 가지 기능을 추가하여 앱을 개선할 수 있습니다. 예를 들어:

    • 할 일 삭제 기능
    • 할 일을 완료 처리하는 기능
    • 할 일 수정 기능

    이러한 기능을 추가하면 사용자가 보다 효율적으로 To Do 앱을 사용할 수 있습니다.

    6.1 할 일 삭제 기능 추가하기

    할 일 삭제 기능은 사용자가 완료한 할 일을 쉽게 삭제할 수 있도록 도와줍니다. 아래와 같이 TodoList.js를 수정합니다:

    import React from 'react';
    
    const TodoList = ({ todos, removeTodo }) => {
        return (
            

    할 일 목록

      {todos.map((todo, index) => (
    • {todo}
    • ))}
    ); } export default TodoList;

    이제 App.js에서 removeTodo 함수를 추가하여 할 일을 삭제할 수 있는 기능을 구현해야 합니다.

    const removeTodo = (index) => {
        setTodos(todos.filter((_, i) => i !== index));
    }

    마지막으로 AddTodo, TodoList 컴포넌트를 호출할 때 removeTodo 함수를 전달합니다.

    <TodoList todos={todos} removeTodo={removeTodo} />

    6.2 할 일 완료 처리 기능 추가하기

    이제 할 일을 완료할 수 있는 기능을 추가해 보겠습니다. 다시 TodoList.js를 수정하여 체크박스를 추가합니다.

    import React from 'react';
    
    const TodoList = ({ todos, removeTodo, toggleTodo }) => {
        return (
            

    할 일 목록

      {todos.map((todo, index) => (
    • toggleTodo(index)} /> {todo.text}
    • ))}
    ); } export default TodoList;

    이제 todo 객체를 수정하여 텍스트와 함께 isCompleted 속성을 추가해야 합니다. App.js에서 addTodo 함수를 수정하여 이러한 기능을 추가합니다.

    const addTodo = (text) => {
        setTodos([...todos, { text, isCompleted: false }]);
    };

    toggleTodo 함수도 추가해야 합니다.

    const toggleTodo = (index) => {
        const newTodos = todos.map((todo, i) => 
            i === index ? { ...todo, isCompleted: !todo.isCompleted } : todo
        );
        setTodos(newTodos);
    };

    7. 마무리

    리액트를 사용하여 간단한 To Do 앱을 만들어 보았습니다. 우리가 구현한 기능은 할 일 추가, 삭제 및 완료 처리 기능입니다. 이 강좌를 통해 리액트의 기본적인 사용법과 컴포넌트 간의 데이터 흐름을 이해하셨길 바랍니다.

    앞으로도 이러한 방식으로 다양한 기능을 추가하거나, CSS를 이용해 스타일링을 개선하는 등 여러분의 앱을 발전시킬 수 있습니다. 이를 통해 리액트에 대한 이해도를 높이고, 실제 프로젝트에서 활용할 수 있는 기초를 마련할 수 있습니다.

    감사합니다. 다음 강좌에서는 더욱 많은 기능 확장과 리팩토링 방법을 알아보겠습니다. 여러분의 성공적인 리액트 학습을 기원합니다!