Trong bài này, chúng ta sẽ học cách tạo bảng table, với dữ liệu động sử dụng reactjs. Chúng ta sẽ xem các thao tác lấy dữ liệu qua web service api và tạo các table row, sau đó là chức năng xoá dữ liệu kèm theo xoá row. Tất cả đều xử dụng reactjs component.
- Trước khi bắt đầu, bạn có thể học bài trước tại đây: Gọi API để xử lý đăng nhập user,
Chức năng
Chúng ta sẽ xây dựng chức năng quản lý danh sách việc cần làm (Todo List) đơn giản, tạm gọi là todo. Mỗi todo sẽ có id
, name
(tên việc), status
(trạng thái). Trạng thái có thể là chưa xong (pending) hoặc đã xong (done).
Người sử dụng có thể tạo todo mới bằng cách nhập tên việc và trạng thái.
Danh sách các đầu việc sẽ được hiện ở dạng bảng.
Tạo reactjs component cho table <table> và row <tr>
Trong thư mục src/components
tạo file TodoTable.js
với đoạn code sau:
import React, { useState } from 'react';
function TodoTableRow({ id, name, status }) {
return (
<tr>
<td>{name}</td>
<td>{status == 1 ? <span>Done</span> : <span>Pending</span>}</td>
<td>
<input type="hidden" value={id}/>
<button>Delete</button>
</td>
</tr>
);
}
function TodoTable({todoData}) {
const [rows, setRows] = useState(todoData);
function handleAddRow() {
setRows([...rows, { name: "", status: "" }]);
}
function handleChange(e, index) {
const newRows = [...rows];
newRows[index][e.target.name] = e.target.value;
setRows(newRows);
}
return (
<div>
<table className='table'>
<thead>
<tr>
<th>Name</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{rows.map((row) => (
<TodoTableRow
id={row.id}
name={row.name}
status={row.status}
/>
))}
</tbody>
</table>
<button onClick={handleAddRow}>Add Row</button>
</div>
);
}
export default TodoTable;
Giao diện cho trang Todo
Tiếp theo chúng ta xây dựng giao diện cho trang Todo sử dụng reactjs cơmponent. Múc đích của trang là lấy dữ liệu từ server và gọi component TodoTable ở trên để in dữ liệu ra màn hình.
Trong thư mục src/screens
thêm file TodoList.js với đoạn code dưới đây:
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import TodoTable from '../components/TodoTable';
import 'bootstrap/dist/css/bootstrap.min.css';
import DefaultLayout from '../layouts/DefaultLayout';
function TodoList() {
const [todoData, setTodoData] = useState([]);
useEffect(() => {
async function fetchData() {
const response = await axios.get('http://localhost:5051/api/todo');
setTodoData(response.data);
}
fetchData();
}, []);
return (
<DefaultLayout title="To-do List">
{todoData.length ? <TodoTable todoData={todoData} /> : <div> Loading... </div> }
</DefaultLayout>
);
}
export default TodoList;
Đoạn code này định nghĩa reactjs component TodoList, cũng là màn hình chính của chức năng quản lý todo này.
useState
khởi tạo một biến todoData (trong reactjs gọi làstate variable
) với giá trị ban đầu là một mảng rỗng.useEffect
dùng axios để API tạihttp://localhost:5051/api/todo
và cập nhật todoData với dữ liệu json trả về từ API.- Trong render method
return
, component này sử dụngDefaultLayout
component chúng ta đã xây dựng ở bài trước để hiển thị nội dung với tiêu đề là “To-do List”. Nó cũng sử dụng TodoTable component để hiển thị bảng với dữ liệu là todoData , nếu dữ liệu todoData không tồn tại, ứng dụng sẽ hiển thị thông báo ‘Loading…’.
Bạn nhớ cài đặt Laravel api, chạy backend server. Sau đó bạn có thể chạy thử ứng dụng reactjs của mình và sẽ thấy kết quả giống như màn hình dưới đây:
Xem khoá học reactjs đầy đủ: https://bephongviet.com/reactjs-bai-1-khoi-dong-du-an-voi-reactjs/