หากคุณกำลังใช้ตอบสนอง 16.3+ ที่วิธีที่แนะนำในการสร้าง refs React.createRef()ใช้
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: React.RefObject<HTMLInputElement>;
constructor(props) {
super(props);
this.stepInput = React.createRef();
}
render() {
return <input type="text" ref={this.stepInput} />;
}
}
เมื่อคอมโพเนนต์เมาท์refคุณสมบัติของแอ็ตทริบิวต์currentจะถูกกำหนดให้กับองค์ประกอบที่อ้างอิง / องค์ประกอบ DOM และกำหนดกลับไปnullเมื่อยกเลิกการต่อเชื่อม ตัวอย่างเช่นคุณสามารถเข้าถึงได้โดยใช้this.stepInput.currentไฟล์.
สำหรับข้อมูลเพิ่มเติมRefObjectโปรดดูคำตอบของ @ apieceofbartหรือPR createRef()ถูกเพิ่มเข้ามา
หากคุณกำลังใช้รุ่นก่อนหน้าของการตอบสนอง (<16.3) หรือต้องการการควบคุมที่ละเอียดมากขึ้นกว่าเมื่อ refs มีการตั้งค่าและไม่มีการตั้งค่าที่คุณสามารถใช้“refs โทรกลับ”
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: HTMLInputElement;
constructor(props) {
super(props);
this.stepInput = null;
this.setStepInputRef = element => {
this.stepInput = element;
};
}
render() {
return <input type="text" ref={this.setStepInputRef} />
}
}
เมื่อคอมโพเนนต์เมาท์ React จะเรียกการrefเรียกกลับด้วยองค์ประกอบ DOM และจะเรียกใช้nullเมื่อยกเลิกการต่อเชื่อม this.stepInputดังนั้นสำหรับตัวอย่างเช่นคุณสามารถเข้าถึงได้เพียงแค่ใช้
ด้วยการกำหนดการrefโทรกลับเป็นวิธีการที่ถูกผูกไว้บนคลาสซึ่งตรงข้ามกับฟังก์ชันอินไลน์ (เช่นเดียวกับในคำตอบรุ่นก่อนหน้านี้) คุณสามารถหลีกเลี่ยงการเรียกกลับสองครั้งในระหว่างการอัปเดต
มีการใช้เป็น API ที่ที่refแอตทริบิวต์เป็นสตริง (ดูคำตอบ Akshar เทลของ ) แต่เนื่องจากบาง ประเด็น , refs สตริงเป็นกำลังใจอย่างมากและในที่สุดก็จะถูกลบออก
แก้ไขเมื่อ 22 พฤษภาคม 2018 เพื่อเพิ่มวิธีการใหม่ในการอ้างอิงใน React 16.3 ขอบคุณ @apieceofbart ที่ชี้ให้เห็นว่ามีวิธีใหม่
refsแอตทริบิวต์คลาสจะเลิกใช้งานในเวอร์ชัน React ที่กำลังจะมีขึ้น