ใช้ React และ API ทำเว็บสำหรับ CRUD ข้อมูล แบบพื้นๆ

Karn Yongsiriwit
3 min readJul 4, 2021

--

บทความนี้จะเป็นพื้นฐานในการสร้างหน้า Web โดยใช้ React เพื่อทำการ CRUD ข้อมูล ซึ่งประกอบไปด้วย Create (สร้าง), Read (อ่าน), Update (แก้ไข) และ Delete (ลบ) ข้อมูล ผ่านการเรียกใช้ API ตัวจำลอง ที่ให้บริการอยู่บนเว็บ MeCallAPI.com (เว็บผมเองครับ 5555)

แปะ clip นะครับ ทำตาม clip ได้เช่นเดียวกัน

ถ้าอยากลองใช้ API สำหรับจำลองการทำ CRUD หรือ Authentication ก็เข้าไปดูรายละเอียดได้ที่ MeCallAPI.com เลยครับ

ส่วนผลลัพธ์ของบทความนี้ มีตัวอย่างให้ลองทดสอบได้ที่ https://www.mecallapi.com/crud/

Software Installation

เริ่มต้นเขียน React

สร้างโปรเจค

npx create-react-app react-crud
cd react-crud

ติดตั้ง package เพิ่มเติม

  • Material UI สำหรับใช้แสดงส่วนประกอบต่าง ๆ บนหน้าจอ (เช่น กล่องข้อความ ปุ่ม เป็นต้น)
  • react-router-dom สำหรับจัดการ Route หรือเส้นทางภายใน app ของเรา
npm install @material-ui/core @material-ui/icons react-router-dom

รัน app ได้เลย

npm start

เข้า URL http://localhost:3000 ด้วย web browser เห็นผลลัพธ์ดังภาพ

สร้างหน้า Read User และ Delete User

แก้ไขไฟล์ App.js โดยใส่ Router จาก react-router-dom เข้าไป โดยใส่ component Navbar และ Users ที่จะสร้างต่อจากนี้

สร้างไฟล์ Navbar.js สำหรับเป็น Component ส่วนของแถบด้านบน โดยใช้ Material UI App bar.

สร้างไฟล์ Users.js สำหรับเป็น Component ส่วนของหน้าแสดงรายการ User โดยในหน้านี้ Code จะค่อนข้างเยอะนะครับ เพราะต้องการความสวยงามของ Material UI นิดนึงครับ 555

หน้านี้จะใช้ API สำหรับข้อมูลรายการ User ตามด้านล่าง (Read)
API URL: https://www.mecallapi.com/api/users
Method: GET

และ API สำหรับการลบข้อมูล (Delete) *API นี้ลบได้เฉพาะข้อมูลที่สร้างใหม่เท่านั้น
API URL: https://www.mecallapi.com/api/users/delete
Method: DELETE
ตัวอย่าง Body (JSON):

{
"id": 11
}

อธิบาย Code ซักหน่อยนะครับ 555

  • useStyles (บรรทัดที่ 18–35 และ 38) เป็นส่วนของการกำหนด CSS ที่ใช้ร่วมกับ Material UI
  • กำหนด State (บรรทัดที่ 40) ชื่อว่า users และฟังก์ชัน setUsers สำหรับแก้ไขค่า users
  • กำหนดฟังก์ชัน useEffect (บรรทัดที่ 41–43) เป็นวิธีการของ React ที่เรียกว่า Effect Hook สำหรับการให้เรียกฟังก์ชัน useEffect หลังจากมีการโหลดหน้าเว็บขึ้นมา และในทุกครั้งที่มีการอัพเดทของค่าของ State ตัวใดก็ตาม เพื่อให้ข้อมูลที่แสดงอยู่บนหน้าเว็บมีการเปลี่ยนแปลงอยาก dynamic (ไม่ต้อง refresh หน้าใหม่)
  • กำหนดฟังก์ชัน UsersGet (บรรทัดที่ 45–53) เพื่อเรียก API เส้น https://www.mecallapi.com/api/users เพื่อนำค่าที่เป็นรายการของ users มาเก็บอยู่ใน State users
  • บรรทัดที่ 55–80 เป็นส่วนของการเรียก API เส้นที่ใช้สำหรับลบ user
  • บรรทัดที่ 113–131 เป็นการนำ State users มาแสดงทีละรายการเป็นแถวในตารางโดยการใช้ loop (map)

ผลลัพธ์ที่ได้จะเป็นหน้ารายการ User ดังภาพ

สร้างหน้าสำหรับ Create User

สร้างไฟล์ UserCreate.js เพื่อเป็น Component สำหรับหน้าสร้างข้อมูล User

แก้ไขไฟล์ App.js โดยเพิ่มหน้า UserCreate เข้าไปใน Router

ทดสอบหน้าสร้างข้อมูล

สร้างหน้าสำหรับ Update User

สร้างไฟล์ UserUpdate.js เพื่อเป็น Component สำหรับหน้าแก้ไขข้อมูล User โดย code จะแทบเหมือนกับหน้า Create User มีแก้ API จากเส้น create เป็น update

API สำหรับการแก้ไขข้อมูล User (Update)
API URL: https://www.mecallapi.com/api/users/update
Method: PUT
ตัวอย่าง Body (JSON):

{
"id": 11,
"fname": "Cat",
"lname": "Gato",
"username": "cat.gato@mecallapi.com",
"email": "cat.gato@mecallapi.com",
"avatar": "https://www.mecallapi.com/users/cat.png"
}

และ API สำหรับการเรียกดูข้อมูล User โดยอ้างอิงจาก id (Read)
API URL: https://www.mecallapi.com/api/users/1
Method: GET
*เลขที่อยู่ท้าย URL จะใช้เป็น id ในการอ้างอิงเพื่อแสดงข้อมูล User

  • กำหนดฟังก์ชัน useEffect (บรรทัดที่ 34–46) เพื่อให้หลังจากมีการโหลดหน้าเว็บขึ้นมา และในทุกครั้งที่มีการอัพเดทของค่าของ State ตัวใดก็ตาม และรวมถึง Props ด้วย (ยกเว้น id เป็นตัวยกเว้น ที่ใส่ใว้ในวงเล็บเหลี่ยม [ ] ท้ายฟังก์ชัน) เพื่อให้ข้อมูลที่แสดงอยู่บนหน้าเว็บมีการเปลี่ยนแปลงทันที

แก้ไขไฟล์ App.js โดยเพิ่มหน้า UserUpdate เข้าไปใน Router

ทดสอบการแก้ไขข้อมูล

ทดสอบการลบข้อมูลด้วยครับ

เรียบร้อยแล้วครับ ไว้ว่างๆ จะมาเพิ่มรายละเอียดในบทความนะครับ

บทความโดย อ.ดร.กานต์ ยงศิริวิทย์
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต

--

--

Karn Yongsiriwit
Karn Yongsiriwit

Written by Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University

No responses yet