ฉันเป็นผู้เขียนหลักของโมดูลเสมือน - โดมดังนั้นฉันอาจตอบคำถามของคุณได้ ในความเป็นจริงมี 2 ปัญหาที่ต้องแก้ไขที่นี่
- ฉันจะแสดงผลอีกครั้งเมื่อใด คำตอบ: เมื่อฉันสังเกตเห็นว่าข้อมูลสกปรก
- ฉันจะแสดงผลใหม่ได้อย่างมีประสิทธิภาพได้อย่างไร คำตอบ: การใช้ DOM เสมือนเพื่อสร้าง patch จริง
ใน React แต่ละคอมโพเนนต์ของคุณมีสถานะ สถานะนี้เป็นสิ่งที่สังเกตเห็นได้คุณอาจพบในสิ่งที่น่าพิศวงหรือห้องสมุดสไตล์ MVVM โดยพื้นฐานแล้วปฏิกิริยาจะรู้ว่าเมื่อใดที่จะแสดงฉากอีกครั้งเนื่องจากสามารถสังเกตได้เมื่อข้อมูลนี้เปลี่ยนแปลง การตรวจสอบสกปรกช้ากว่าสิ่งที่สังเกตได้เนื่องจากคุณต้องสำรวจข้อมูลในช่วงเวลาปกติและตรวจสอบค่าทั้งหมดในโครงสร้างข้อมูลแบบเรียกซ้ำ โดยการเปรียบเทียบการตั้งค่าในสถานะจะส่งสัญญาณไปยังผู้ฟังที่บางรัฐเปลี่ยนแปลงดังนั้น React สามารถฟังเหตุการณ์การเปลี่ยนแปลงในสถานะและจัดคิวการแสดงผลใหม่
DOM เสมือนใช้สำหรับการเรนเดอร์ DOM อีกครั้งอย่างมีประสิทธิภาพ สิ่งนี้ไม่เกี่ยวข้องกับการตรวจสอบข้อมูลของคุณอย่างสกปรก คุณสามารถแสดงผลซ้ำโดยใช้ DOM เสมือนโดยมีหรือไม่มีการตรวจสอบที่สกปรก คุณพูดถูกว่ามีค่าใช้จ่ายในการคำนวณส่วนต่างระหว่างต้นไม้เสมือนสองต้น แต่ DOM เสมือนนั้นเกี่ยวกับการทำความเข้าใจกับสิ่งที่จำเป็นต้องปรับปรุงใน DOM ไม่ใช่ว่าข้อมูลของคุณเปลี่ยนแปลงหรือไม่ อันที่จริงแล้วอัลกอริธึม diff เป็นตัวตรวจสอบที่สกปรกแต่มันถูกใช้เพื่อดูว่า DOM สกปรกหรือไม่
เรามุ่งมั่นที่จะเรนเดอร์ต้นไม้เสมือนอีกครั้งเมื่อสถานะมีการเปลี่ยนแปลง ดังนั้นการใช้สิ่งที่สังเกตได้เพื่อตรวจสอบว่ารัฐเปลี่ยนไปหรือไม่เป็นวิธีที่มีประสิทธิภาพในการป้องกันการแสดงผลซ้ำโดยไม่จำเป็นซึ่งจะทำให้ต้นไม้ไม่จำเป็นจำนวนมากแตกต่างกัน ถ้าไม่มีอะไรเปลี่ยนแปลงเราก็ไม่ทำอะไรเลย
DOM เสมือนเป็นสิ่งที่ดีเพราะมันช่วยให้เราสามารถเขียนโค้ดของเราราวกับว่าเรากำลังแสดงฉากทั้งหมด เบื้องหลังเราต้องการคำนวณการปะแก้ที่อัปเดต DOM เพื่อให้เป็นไปตามที่เราคาดหวัง ดังนั้นในขณะที่อัลกอริทึม DOM diff / patch เสมือนอาจไม่ใช่ทางออกที่ดีที่สุดแต่ก็เป็นวิธีที่ดีมากในการแสดงแอปพลิเคชันของเรา เราเพิ่งประกาศสิ่งที่เราต้องการอย่างแน่นอนและ React / virtual-dom จะหาวิธีทำให้ฉากของคุณเป็นแบบนี้ เราไม่จำเป็นต้องทำการจัดการ DOM ด้วยตนเองหรือสับสนเกี่ยวกับสถานะ DOM ก่อนหน้า เราไม่จำเป็นต้องแสดงภาพทั้งฉากอีกครั้งซึ่งอาจมีประสิทธิภาพน้อยกว่าการปะแก้