ได้ลองสำรวจความแตกต่างระหว่าง React ซึ่งเป็นต้นกำเนิดของ JSX และ Solid.js ซึ่งต่อยอดมาจาก JSX แต่ต่างจาก React ตรงที่ไม่ใช้ virtual DOM
เมื่อสมมติกรณีที่นักพัฒนา React จะเริ่มใช้งาน Solid.js ความแตกต่างพื้นฐานมีดังนี้
- ฟังก์ชัน hook ของ React ใช้ได้เฉพาะภายในฟังก์ชันคอมโพเนนต์เท่านั้น แต่ฟังก์ชันจัดการสถานะของ SolidJS ไม่มีข้อจำกัดเรื่องตำแหน่งการเรียกใช้งาน ราวกับเป็นเทคนิคจัดการสถานะที่แยกอิสระออกมา
- ฟังก์ชัน side-effect ของ React อย่าง
useEffectสามารถจัดการทั้งการทำงานเมื่อเกิด side effect และการ cleanup ภายในฟังก์ชันเดียวได้ พร้อมทั้งระบุสถานะที่ได้รับผลกระทบแบบกำหนดเองได้ แต่ฟังก์ชัน side-effect ของ Solid.js อย่างcreateEffectจะได้รับผลจากสถานะที่ระบุไว้ในเนื้อหาเหมือน Svelte ไม่ได้ให้ระบุสถานะที่ได้รับผลกระทบด้วยตนเอง และไม่ได้คืนฟังก์ชันกลับมาโดยตรง แต่มีสภาพแวดล้อมของวงจรจัดการสถานะหนึ่งชุด ทำให้ใช้ฟังก์ชัน cleanup ผ่านonCleanupได้ - ในด้านการจัดการขอบเขตของสถานะ ไม่มีความแตกต่างด้านวิธีใช้งานจาก React
- สำหรับคอมโพเนนต์แบบไดนามิก เงื่อนไข และลูป React สามารถใช้ตรรกะ JavaScript ได้อย่างสะดวก เพราะเมื่อสถานะเปลี่ยน เนื้อหาภายในจะถูกเขียนใหม่ แต่ Solid จะคงเนื้อหาเดิมไว้ จึงแก้ปัญหานี้ผ่านคอมโพเนนต์ในตัวที่มีมาให้
- Solid.js ก็มีคอมโพเนนต์
lazyและ<Suspense>แบบเดียวกับ React - Solid ต่างจาก React ตรงที่มีฟังก์ชันยูทิลิตีจัดการสถานะที่คำนึงถึง asynchronous reactivity
- วิธีใช้
refของ React และrefของ Solid.js คล้ายกัน แต่ใน React มักมีฟังก์ชันเฉพาะอย่างuseRefสำหรับการอ้างอิง ขณะที่ใน Solid.js สามารถใช้ตัวแปรletได้อย่างง่ายดาย - Solid.js มีคุณสมบัติ
useaction สำหรับจัดการวงจรชีวิตของ vanilla JS คล้ายกับ Svelte - สำหรับ props ของ React แม้จะแยกโครงสร้างออกมาใช้เดี่ยว ๆ เมื่อค่า props เปลี่ยน เนื้อหาก็จะถูกเขียนใหม่ จึงใช้งานได้ไม่มีปัญหา แต่ถ้าใช้วิธีนี้ใน Solid.js จะไม่เกิดการตอบสนอง ทำให้ไม่สามารถดึง props ออกมาใช้เดี่ยว ๆ ผ่านการ destructuring ได้ ต้องใช้งานในรูปอ็อบเจ็กต์เดิม หรือแยกผ่านฟังก์ชันยูทิลิตีที่รองรับการแยกหรือรวมอ็อบเจ็กต์ (
splitPropsเป็นต้น) เพื่อให้ยังใช้งานในลักษณะอ็อบเจ็กต์ได้
1 ความคิดเห็น
ความแตกต่างที่ใหญ่ที่สุดคือความต่างระหว่าง
useStateกับuseSignalนั่นแหละ เพราะมองไม่เห็นด้วยตาว่าข้อมูลถูก binding อย่างไร เลยจำได้ว่าตอนดีบักเหนื่อยมาก