React เป็นไลบรารีส่วนหน้าที่ได้รับความนิยมมากที่สุดในช่วงไม่กี่ปีที่ผ่านมา
Vue เป็นเฟรมเวิร์กส่วนหน้าที่ได้รับความนิยมจาก React ในช่วงไม่กี่ปีที่ผ่านมา
เป็นการยากที่จะเลือกระหว่าง 2 กรอบงานเนื่องจากมีทั้งข้อดีและข้อเสีย เมื่อเราเลือกสิ่งหนึ่ง เราต้องยึดติดกับมันไปอีกสองสามปี
ในบทความนี้ เราจะมาดูว่าเราเขียนโค้ดจัดการเหตุการณ์ด้วย React และ Vue อย่างไร และอันไหนสะดวกกว่ากัน
การจัดการเหตุการณ์ขั้นพื้นฐาน
ด้วย React เราจะเชื่อมโยงตัวจัดการเหตุการณ์ของเราเข้ากับส่วนประกอบ JSX โดยตรง
ตัวอย่างเช่น เราสามารถเขียนโค้ดต่อไปนี้เพื่อจัดการการคลิกด้วย React:
import React, { useState } from "react"; export default function App() { const [count, setCount] = useState(0); const increment = () => { setCount(count + 1); }; return ( <div className="App"> <button onClick={increment}>Increment</button> <div>{count}</div> </div> ); }
ในโค้ดด้านบน เราได้เพิ่มตัวจัดการ increment
click และส่งต่อไปยังเสา onClick
เพื่อว่าเมื่อเราคลิกปุ่มส่วนเพิ่ม เราจะเห็นค่า count
เพิ่มขึ้น
ด้วย Vue เราสามารถเขียนสิ่งต่อไปนี้เพื่อทำสิ่งเดียวกันได้:
index.html
:
<!DOCTYPE html> <html lang="en"> <head> <title>App</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <button @click="increment">Increment</button> <div>{{count}}</div> </div> <script src="index.js"></script> </body> </html>
index.js
:
const app = new Vue({ el: "#app", data: { count: 0 }, methods: { increment() { this.count++; } } });
ในโค้ดด้านบน เรามีตัวจัดการ increment
เช่นเดียวกับที่เราทำกับตัวอย่าง React
อย่างไรก็ตาม การอัปเดตค่าจะง่ายกว่าเนื่องจากเราอัปเดต count
โดยตรง แทนที่จะเรียกใช้ฟังก์ชันที่ส่งคืนจากฮุก useState
เพื่ออัปเดตการนับ
การส่งผ่านตัวจัดการคลิกทำได้ค่อนข้างมากในลักษณะเดียวกัน ยกเว้นว่าเราต้องจำไว้ว่าต้องใช้คำสั่ง @click
การจัดการการคลิกจะค่อนข้างเหมือนกันไม่ว่าในกรณีใด
การปรับเปลี่ยนพฤติกรรมการจัดการเหตุการณ์
Vue มีตัวแก้ไขเหตุการณ์เพื่อปรับเปลี่ยนพฤติกรรมของวิธีที่ตัวจัดการเหตุการณ์จัดการกับเหตุการณ์
เราสามารถใส่ไว้หลังคำสั่งการจัดการเหตุการณ์ได้ ตัวอย่างเช่น หากเราต้องการป้องกันพฤติกรรมการส่งเริ่มต้นในแบบฟอร์ม เราจะเขียน:
<!DOCTYPE html> <html lang="en"> <head> <title>App</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <form v-on:submit.prevent="onSubmit"> <input v-model="name" /> </form> </div> <script src="index.js"></script> </body> </html>
index.js
:
const app = new Vue({ el: "#app", data: { name: "" }, methods: { onSubmit() { alert(this.name); } } });
เพื่อเพิ่มแบบฟอร์มที่มีตัวจัดการการส่งที่ไม่เป็นไปตามพฤติกรรมการส่งเริ่มต้น
ตัวแก้ไข .prevent
เป็นทางลัดที่สะดวกสำหรับการเรียก e.preventDefault
ในตัวจัดการการส่งของเรา
ด้วย React เราต้องโทร preventDefault()
ตัวอย่างที่เทียบเท่าใน React จะเป็น:
import React, { useState } from "react"; export default function App() { const [name, setName] = useState(""); const onSubmit = e => { e.preventDefault(); alert(name); }; return ( <div className="App"> <form onSubmit={onSubmit}> <input onChange={e => setName(e.target.value)} /> </form> </div> ); }
เวอร์ชัน Vue สั้นกว่าเล็กน้อย แต่ก็ไม่ได้แตกต่างกันมากนัก
การจัดการกับการกดปุ่ม
ด้วย Vue เราสามารถจัดการการกดปุ่มด้วยตัวจัดการเหตุการณ์ของเราด้วยตัวปรับแต่งคำสั่ง v-on
เช่นเดียวกับที่เราทำด้วยการคลิก
ตัวอย่างเช่น หากเราต้องการแสดงการแจ้งเตือนเมื่อเราควบคุมแล้วคลิกบน div เราสามารถเขียนได้:
index.html
:
<!DOCTYPE html> <html lang="en"> <head> <title>App</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <div v-on:click.ctrl="help">Help</div> </div> <script src="index.js"></script> </body> </html>
index.js
:
const app = new Vue({ el: "#app", data: {}, methods: { help() { alert("help"); } } });
ในโค้ดด้านบนเรามี:
v-on:click.ctrl="help"
เพื่อเรียกใช้เมธอด help
เมื่อเราควบคุมแล้วคลิกที่ div
ด้วย React เราต้องใช้ JavaScript ธรรมดาเพื่อทำสิ่งนี้:
import React from "react"; export default function App() { const onClick = e => { e.stopPropagation(); if (e.ctrlKey) { alert("help"); } }; return ( <div className="App"> <div onClick={onClick}>Help</div> </div> ); }
ในโค้ดด้านบน เรามีตัวจัดการ onClick
ที่จะหยุดการเผยแพร่เหตุการณ์ไปยังระดับบนสุดก่อน
จากนั้นเราตรวจสอบว่ามีการกด ctrlKey
ด้วยการคลิกหรือไม่
จากนั้นเราจะแสดงการแจ้งเตือนหาก e.ctrlKey
เป็น true
ซึ่งหมายความว่ามีการกดปุ่มควบคุม
สิ่งนี้ซับซ้อนกว่าอย่างแน่นอนเมื่อใช้ React หากเราต้องการจัดการการกดแป้นพิมพ์และเมาส์ที่ซับซ้อนยิ่งขึ้น สิ่งนี้จะยิ่งยากขึ้น
คำตัดสิน
การจัดการเหตุการณ์จะดีกว่าเมื่อใช้ Vue เนื่องจากมีตัวแก้ไขเพื่อปรับเปลี่ยนพฤติกรรมของคำสั่งการจัดการเหตุการณ์
โดยเฉพาะอย่างยิ่งเมื่อเราจำเป็นต้องจัดการกับการโต้ตอบที่ซับซ้อนมากขึ้น เช่น การใช้แป้นพิมพ์และเมาส์ร่วมกัน
ไม่มีวิธีที่ง่ายในการทำเช่นนั้นด้วย React