In this article, we will create a to-do app to understand the basics of ReactJS. We will be working with class based components in this application and use the React-Bootstrap module to style the components. This to-do list can add new tasks we can also delete the tasks by clicking on them. The logic is handled by a click event handler whenever the user clicks on a task it gets deleted from the list.
Lets have a quick look at how the final application will look like:
ToDo App using ReactJSÂ
Steps to create the Application:
- NPX: It is a package runner tool that comes with npm 5.2+, npx is easy to use CLI tools. The npx is used for executing Node packages.
npx create-react-app todo-react
- Now, goto the folder
cd todo-react
- Install the bootstrap and react-bootstrap module
npm install bootstrap npm install react-bootstrap
After following the above steps the Folder structure will look like:
Folder Structure:
Â
The dependencies in package.json file will look like:
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"bootstrap": "^5.3.0",
"react-bootstrap": "^2.7.4",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
}
Example: Write the below code in App.js file in the src directory
javascript
// App.js File import React, { Component } from "react"; import "bootstrap/dist/css/bootstrap.css"; import Container from "react-bootstrap/Container"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; import Button from "react-bootstrap/Button"; import InputGroup from "react-bootstrap/InputGroup"; import FormControl from "react-bootstrap/FormControl"; import ListGroup from "react-bootstrap/ListGroup";   class App extends Component {     constructor(props) {         super(props);           // Setting up state         this.state = {             userInput: "",             list: [],         };     }       // Set a user input value     updateInput(value) {         this.setState({             userInput: value,         });     }       // Add item if user input in not empty     addItem() {         if (this.state.userInput !== "") {             const userInput = {                 // Add a random id which is used to delete                 id: Math.random(),                   // Add a user value to list                 value: this.state.userInput,             };               // Update list             const list = [...this.state.list];             list.push(userInput);               // reset state             this.setState({                 list,                 userInput: "",             });         }     }       // Function to delete item from list use id to delete     deleteItem(key) {         const list = [...this.state.list];           // Filter values and leave value which we need to delete         const updateList = list.filter((item) => item.id !== key);           // Update list in state         this.setState({             list: updateList,         });     }       editItem = (index) => {       const todos = [...this.state.list];       const editedTodo = prompt('Edit the todo:');       if (editedTodo !== null && editedTodo.trim() !== '') {         let updatedTodos = [...todos]         updatedTodos[index].value= editedTodo         this.setState({           list: updatedTodos,       });       }     }       render() {         return (             <Container>                 <Row                     style={{                         display: "flex",                         justifyContent: "center",                         alignItems: "center",                         fontSize: "3rem",                         fontWeight: "bolder",                     }}                 >                     TODO LIST                 </Row>                   <hr />                 <Row>                     <Col md={{ span: 5, offset: 4 }}>                         <InputGroup className="mb-3">                             <FormControl                                 placeholder="add item . . . "                                size="lg"                                value={this.state.userInput}                                 onChange={(item) =>                                     this.updateInput(item.target.value)                                 }                                 aria-label="add something"                                aria-describedby="basic-addon2"                            />                             <InputGroup>                                 <Button                                     variant="dark"                                    className="mt-2"                                    onClick={() => this.addItem()}                                 >                                     ADD                                 </Button>                             </InputGroup>                         </InputGroup>                     </Col>                 </Row>                 <Row>                     <Col md={{ span: 5, offset: 4 }}>                         <ListGroup>                             {/* map over and print items */}                             {this.state.list.map((item, index) => {                                 return (                                   <div key = {index} >                                     <ListGroup.Item                                         variant="dark"                                        action                                         style={{display:"flex",                                                 justifyContent:'space-between'                                      }}                                     >                                         {item.value}                                         <span>                                         <Button style={{marginRight:"10px"}}                                         variant = "light"                                        onClick={() => this.deleteItem(item.id)}>                                           Delete                                         </Button>                                         <Button variant = "light"                                        onClick={() => this.editItem(index)}>                                           Edit                                         </Button>                                         </span>                                     </ListGroup.Item>                                   </div>                                 );                             })}                         </ListGroup>                     </Col>                 </Row>             </Container>         );     } }   export default App; |
Steps to run the Application:
- Type the following command in the terminal:
npm start
- Type the following URL in the browser:
http://localhost:3000/
Output:
ToDo App using ReactJSÂ

[…] ToDo application is the most basic project to test the knowledge of React. It will covers all the basic concept […]