Nếu bạn đang sử dụng React 16.3+, cách được đề xuất để tạo ref là sử dụng 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} />;
}
}
Khi thành phần gắn kết, refthuộc tính của thuộc tính currentsẽ được gán cho thành phần thành phần / DOM được tham chiếu và được gán lại nullkhi nó ngắt kết nối. Vì vậy, ví dụ, bạn có thể truy cập nó bằng cách sử dụng this.stepInput.current.
Để biết thêm về RefObject, hãy xem câu trả lời của @ apieceofbart hoặc PR createRef() đã được thêm vào.
Nếu bạn đang sử dụng phiên bản React trước đó (<16.3) hoặc cần kiểm soát chi tiết hơn đối với khi giới thiệu được đặt và không được đặt, bạn có thể sử dụng giới thiệu gọi lại giới thiệu .
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} />
}
}
Khi thành phần gắn kết, React sẽ gọi reflại cuộc gọi với phần tử DOM và sẽ gọi nó nullkhi nó ngắt kết nối. Vì vậy, ví dụ, bạn có thể truy cập nó đơn giản bằng cách sử dụng this.stepInput.
Bằng cách định nghĩa cuộc refgọi lại là một phương thức ràng buộc trên lớp trái ngược với hàm nội tuyến (như trong phiên bản trước của câu trả lời này), bạn có thể tránh cuộc gọi lại được gọi hai lần trong khi cập nhật.
Đã từng có một API trong đó refthuộc tính là một chuỗi (xem câu trả lời của Akshar Patel ), nhưng do một số vấn đề , các tham chiếu chuỗi bị ngăn cản mạnh mẽ và cuối cùng sẽ bị xóa.
Đã chỉnh sửa ngày 22 tháng 5 năm 2018 để thêm cách làm mới refs trong React 16.3. Cảm ơn @apieceofbart đã chỉ ra rằng có một cách mới.
refsthuộc tính lớp sẽ không được chấp nhận trong các phiên bản React sắp tới.