{"id":32835,"date":"2024-11-01T09:11:52","date_gmt":"2024-11-01T09:11:52","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=32835"},"modified":"2024-11-01T11:21:48","modified_gmt":"2024-11-01T11:21:48","slug":"react-course-to-do-app-example-update-editing-tasks","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/32835\/","title":{"rendered":"React Course: To Do App Example, Update: Editing Tasks"},"content":{"rendered":"<p><body><\/p>\n<p>In this course, we will create a simple To Do app using React. We will delve into how to add the functionality to modify tasks. Don&#8217;t worry; I will explain step by step from the basics so that even those who are new to React can understand.<\/p>\n<h2>1. Introduction to React<\/h2>\n<p>React is a JavaScript library for building user interfaces. It was developed by Facebook and helps easily create dynamic web applications on a single page. One of the biggest advantages of React is its component-based structure. This enhances code reusability and makes maintenance easier.<\/p>\n<h3>1.1 Components<\/h3>\n<p>In React, everything is made up of components. A component can be thought of as an independent block that makes up part of the screen. Each component can have its own state and props, allowing it to pass data back and forth with parent components.<\/p>\n<h2>2. Setting Up the Basic Structure of the To Do App<\/h2>\n<p>First, we will set up the basic structure of the To Do app. Please follow the steps below.<\/p>\n<h3>2.1 Creating the Project<\/h3>\n<pre><code>npx create-react-app todo-app<\/code><\/pre>\n<p>The above command creates a new React project. The necessary files will be generated inside a folder called <code>todo-app<\/code>.<\/p>\n<h3>2.2 Creating the Basic Component Structure<\/h3>\n<p>Create a <code>Todo.js<\/code> file inside the src folder and write the basic structure as shown below.<\/p>\n<pre><code>import React, { useState } from 'react';\n\nconst Todo = () =&gt; {\n    const [todos, setTodos] = useState([]);\n    const [inputValue, setInputValue] = useState('');\n\n    const handleAdd = () =&gt; {\n        if (!inputValue) return;\n        setTodos([...todos, { text: inputValue, isEditing: false }]);\n        setInputValue('');\n    };\n\n    return (\n        <div>\n            <h2>To Do List<\/h2>\n            <input ==\"\" onchange=\"{e\" type=\"text\" value=\"{inputValue}\"\/> setInputValue(e.target.value)} \/&gt;\n            <button onclick=\"{handleAdd}\">Add<\/button>\n            <ul>\n                {todos.map((todo, index) =&gt; (\n                    <li key=\"{index}\">{todo.text}<\/li>\n                ))}\n            <\/ul>\n        <\/div>\n    );\n};\n\nexport default Todo;<\/code><\/pre>\n<h2>3. Adding Task Modification Feature<\/h2>\n<p>Now, let&#8217;s add the task modification feature to the To Do app. We will implement a way for users to modify an item when they click on it.<\/p>\n<h3>3.1 Adding State Management<\/h3>\n<p>To add state management functionality, we need to include an edit mode for each task item. Modify the <code>Todo.js<\/code> file as shown below.<\/p>\n<pre><code>const handleEdit = (index) =&gt; {\n    const updatedTodos = todos.map((todo, idx) =&gt; {\n        if (idx === index) {\n            return { ...todo, isEditing: !todo.isEditing };\n        }\n        return todo;\n    });\n    setTodos(updatedTodos);\n};\n\nconst handleUpdate = (index, newText) =&gt; {\n    const updatedTodos = todos.map((todo, idx) =&gt; {\n        if (idx === index) {\n            return { text: newText, isEditing: false };\n        }\n        return todo;\n    });\n    setTodos(updatedTodos);\n};<\/code><\/pre>\n<h3>3.2 Creating the Edit UI<\/h3>\n<p>Now we need to create an edit UI so that users can easily modify tasks. Insert the following code inside the <code>return<\/code> statement.<\/p>\n<pre><code>{todos.map((todo, index) =&gt; (\n    <li key=\"{index}\">\n        {todo.isEditing ? (\n            <div>\n                <input ==\"\" defaultvalue=\"{todo.text}\" onchange=\"{e\" type=\"text\"\/> handleUpdate(index, e.target.value)} \n                \/&gt;\n                <button ==\"\" onclick=\"{()\"> handleEdit(index)}&gt;Done<\/button>\n            <\/div>\n        ) : (\n            <div ==\"\" onclick=\"{()\"> handleEdit(index)}&gt;{todo.text}<\/div>\n        )}\n    <\/li>\n))}<\/code><\/pre>\n<h3>3.3 Complete Code<\/h3>\n<p>Now the complete code is as follows.<\/p>\n<pre><code>import React, { useState } from 'react';\n\nconst Todo = () =&gt; {\n    const [todos, setTodos] = useState([]);\n    const [inputValue, setInputValue] = useState('');\n\n    const handleAdd = () =&gt; {\n        if (!inputValue) return;\n        setTodos([...todos, { text: inputValue, isEditing: false }]);\n        setInputValue('');\n    };\n\n    const handleEdit = (index) =&gt; {\n        const updatedTodos = todos.map((todo, idx) =&gt; {\n            if (idx === index) {\n                return { ...todo, isEditing: !todo.isEditing };\n            }\n            return todo;\n        });\n        setTodos(updatedTodos);\n    };\n\n    const handleUpdate = (index, newText) =&gt; {\n        const updatedTodos = todos.map((todo, idx) =&gt; {\n            if (idx === index) {\n                return { text: newText, isEditing: false };\n            }\n            return todo;\n        });\n        setTodos(updatedTodos);\n    };\n\n    return (\n        <div>\n            <h2>To Do List<\/h2>\n            <input ==\"\" onchange=\"{e\" type=\"text\" value=\"{inputValue}\"\/> setInputValue(e.target.value)} \/&gt;\n            <button onclick=\"{handleAdd}\">Add<\/button>\n            <ul>\n                {todos.map((todo, index) =&gt; (\n                    <li key=\"{index}\">\n                        {todo.isEditing ? (\n                            <div>\n                                <input ==\"\" defaultvalue=\"{todo.text}\" onchange=\"{e\" type=\"text\"\/> handleUpdate(index, e.target.value)} \n                                \/&gt;\n                                <button ==\"\" onclick=\"{()\"> handleEdit(index)}&gt;Done<\/button>\n                            <\/div>\n                        ) : (\n                            <div ==\"\" onclick=\"{()\"> handleEdit(index)}&gt;{todo.text}<\/div>\n                        )}\n                    <\/li>\n                ))}\n            <\/ul>\n        <\/div>\n    );\n};\n\nexport default Todo;<\/code><\/pre>\n<h2>4. Conclusion<\/h2>\n<p>Congratulations! You have now created a To Do app using React and added the functionality to modify tasks. Through this course, you have understood the basic concepts of React and learned how to write code through practice. In the future, try adding more features through more complex state management or integration with various libraries.<\/p>\n<h2>5. Next Course Preview<\/h2>\n<p>In the next course, we will discuss how to add additional features to the To Do app or manage pages using React Router. We look forward to your expectations!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will create a simple To Do app using React. We will delve into how to add the functionality to modify tasks. Don&#8217;t worry; I will explain step by step from the basics so that even those who are new to React can understand. 1. Introduction to React React is a JavaScript &hellip; <a href=\"https:\/\/atmokpo.com\/w\/32835\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;React Course: To Do App Example, Update: Editing Tasks&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[123],"tags":[],"class_list":["post-32835","post","type-post","status-publish","format-standard","hentry","category-react-basics-course"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React Course: To Do App Example, Update: Editing Tasks - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/32835\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React Course: To Do App Example, Update: Editing Tasks - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will create a simple To Do app using React. We will delve into how to add the functionality to modify tasks. Don&#8217;t worry; I will explain step by step from the basics so that even those who are new to React can understand. 1. Introduction to React React is a JavaScript &hellip; \ub354 \ubcf4\uae30 &quot;React Course: To Do App Example, Update: Editing Tasks&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/32835\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:11:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:21:48+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/32835\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32835\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"React Course: To Do App Example, Update: Editing Tasks\",\"datePublished\":\"2024-11-01T09:11:52+00:00\",\"dateModified\":\"2024-11-01T11:21:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32835\/\"},\"wordCount\":399,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"React basics course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/32835\/\",\"url\":\"https:\/\/atmokpo.com\/w\/32835\/\",\"name\":\"React Course: To Do App Example, Update: Editing Tasks - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:11:52+00:00\",\"dateModified\":\"2024-11-01T11:21:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32835\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/32835\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/32835\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Course: To Do App Example, Update: Editing Tasks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"React Course: To Do App Example, Update: Editing Tasks - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/32835\/","og_locale":"ko_KR","og_type":"article","og_title":"React Course: To Do App Example, Update: Editing Tasks - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will create a simple To Do app using React. We will delve into how to add the functionality to modify tasks. Don&#8217;t worry; I will explain step by step from the basics so that even those who are new to React can understand. 1. Introduction to React React is a JavaScript &hellip; \ub354 \ubcf4\uae30 \"React Course: To Do App Example, Update: Editing Tasks\"","og_url":"https:\/\/atmokpo.com\/w\/32835\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:11:52+00:00","article_modified_time":"2024-11-01T11:21:48+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/32835\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/32835\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"React Course: To Do App Example, Update: Editing Tasks","datePublished":"2024-11-01T09:11:52+00:00","dateModified":"2024-11-01T11:21:48+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/32835\/"},"wordCount":399,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["React basics course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/32835\/","url":"https:\/\/atmokpo.com\/w\/32835\/","name":"React Course: To Do App Example, Update: Editing Tasks - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:11:52+00:00","dateModified":"2024-11-01T11:21:48+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/32835\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/32835\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/32835\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"React Course: To Do App Example, Update: Editing Tasks"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=32835"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32835\/revisions"}],"predecessor-version":[{"id":32836,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32835\/revisions\/32836"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=32835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=32835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=32835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}