ทำความเข้าใจเกี่ยวกับ Invalidators ใน React
Invalidator เป็นอ็อบเจ็กต์ JavaScript ที่อนุญาตให้คุณทำให้สถานะของส่วนประกอบ React เป็นโมฆะ (หรือรีเซ็ต) เมื่อสถานะของส่วนประกอบไม่ถูกต้อง React จะเรนเดอร์ส่วนประกอบอีกครั้งด้วยสถานะที่อัปเดต กล่าวอีกนัยหนึ่ง ตัวทำให้ใช้ไม่ได้คือวิธีที่จะบอก React ว่าสถานะของส่วนประกอบมีการเปลี่ยนแปลงและจำเป็นต้องทำการเรนเดอร์อีกครั้ง ต่อไปนี้คือบางส่วน กรณีการใช้งานทั่วไปสำหรับผู้ทำให้ใช้ไม่ได้:
1 เมื่อข้อมูลเปลี่ยนแปลง: หากข้อมูลที่ส่วนประกอบกำลังแสดงผลเปลี่ยนแปลง คุณสามารถใช้ตัวทำให้ใช้ไม่ได้เพื่อบอกให้ React เรนเดอร์ส่วนประกอบอีกครั้งด้วยข้อมูลที่อัปเดต
2 เมื่อพร็อพเปลี่ยนแปลง: หากพร็อพของส่วนประกอบเปลี่ยนแปลง คุณสามารถใช้ตัวทำให้ไม่ถูกต้องเพื่อบอกให้ React เรนเดอร์ส่วนประกอบอีกครั้งด้วยพร็อพใหม่
3 เมื่อการเปลี่ยนแปลงสถานะไม่ถูกกระตุ้นโดยการเปลี่ยนแปลงพร็อพ: บางครั้ง คุณอาจต้องการเรนเดอร์ส่วนประกอบอีกครั้ง แม้ว่าอุปกรณ์ประกอบฉากจะไม่เปลี่ยนแปลงก็ตาม ตัวอย่างเช่น หากคุณใช้ตัวแปรสถานะเพื่อติดตามจำนวนรายการในรายการ และผู้ใช้เพิ่มหรือลบรายการ คุณสามารถใช้ตัวทำให้ใช้ไม่ได้เพื่อบอกให้ React เรนเดอร์ส่วนประกอบอีกครั้งด้วยสถานะที่อัปเดต
4 เมื่อส่วนประกอบถูกถอนการเชื่อมต่อ: หากส่วนประกอบถูกถอนการเชื่อมต่อ (เช่น ถูกลบออกจาก DOM) คุณสามารถใช้ตัวทำให้ใช้ไม่ได้เพื่อบอกให้ React ล้างทรัพยากรใดๆ ที่ส่วนประกอบนั้นใช้ โดยทั่วไปตัวตรวจสอบความถูกต้องจะถูกนำไปใช้เป็นฟังก์ชันที่ส่งคืนค่าบูลีน ระบุว่าสถานะของส่วนประกอบมีการเปลี่ยนแปลงหรือไม่ นี่คือตัวอย่างวิธีที่คุณอาจใช้ตัวทำให้ใช้ไม่ได้ในส่วนประกอบ React:
```
class Counter ขยาย React.Component {
state = { count: 0 };
invalidator = () => {
return this.state. count !== this.lastCount;
};
handleAdd = () => {
this.lastCount = this.state.count;
this.setState({ count: this.state.count + 1 });
} ;
render() {
return (
Count: {this.state.count}
);
}
}
```
ในตัวอย่างนี้ ฟังก์ชัน `invalidator` จะส่งคืนค่า `true` หากสถานะของส่วนประกอบเปลี่ยนไป และ `false` มิฉะนั้น ฟังก์ชัน `handleAdd` จะอัปเดตสถานะของส่วนประกอบโดยตั้งค่า `lastCount` ให้เป็นจำนวนปัจจุบัน จากนั้นอัปเดตสถานะ `count` ด้วยค่าใหม่ เมื่อส่วนประกอบถูกเรนเดอร์ใหม่ React จะเรียกใช้ฟังก์ชัน `invalidator` เพื่อตรวจสอบว่าสถานะมีการเปลี่ยนแปลงหรือไม่ และหากเป็นเช่นนั้น ก็จะเรนเดอร์ส่วนประกอบนั้นอีกครั้งด้วยสถานะที่อัปเดต



