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, ref
thuộc tính của thuộc tính current
sẽ được gán cho thành phần thành phần / DOM được tham chiếu và được gán lại null
khi 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 ref
lại cuộc gọi với phần tử DOM và sẽ gọi nó null
khi 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 ref
gọ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 đó ref
thuộ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.
refs
thuộ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.