× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Tạo ứng dụng ToDo bằng ReactJS

22/09/2023 01:28

Trong bài viết này, chúng ta sẽ tạo một ứng dụng việc cần làm để hiểu những điều cơ bản về ReactJS . Chúng a sẽ làm việc với các thành phần dựa trên lớp trong ứng dụng này và sử dụng mô-đun React-Bootstrap

Trong bài viết này, chúng tôi sẽ tạo một ứng dụng việc cần làm để hiểu những điều cơ bản về ReactJS . Chúng tôi sẽ làm việc với các thành phần dựa trên lớp trong ứng dụng này và sử dụng mô-đun React-Bootstrap để tạo kiểu cho các thành phần. Danh sách việc cần làm này có thể thêm các nhiệm vụ mới, chúng tôi cũng có thể xóa các nhiệm vụ bằng cách nhấp vào chúng. Logic được xử lý bởi trình xử lý sự kiện nhấp chuột bất cứ khi nào người dùng nhấp vào một tác vụ thì nó sẽ bị xóa khỏi danh sách.

Các bước để tạo Ứng dụng:

  • NPX: Đây là một công cụ chạy gói đi kèm với npm 5.2+, npx rất dễ sử dụng các công cụ CLI. Npx được sử dụng để thực thi các gói Node.
npx create-react-app todo-react
  • Bây giờ, hãy vào thư mục
cd todo-react
  • Cài đặt mô-đun bootstrap và Reac-bootstrap
npm install bootstrap
npm install react-bootstrap

Sau khi làm theo các bước trên, cấu trúc Thư mục sẽ như sau:

 

Cấu trúc thư mục:

Các phần phụ thuộc trong tệp pack.json sẽ có dạng:

"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: 
// 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:

npm start
Gõ đường dẫn sau
 http://localhost:3000/


Tạo ứng dụng ToDo bằng ReactJS