What is Ref ?
Last updated
Was this helpful?
Last updated
Was this helpful?
React refs là một tính năng hữu ích, nó là cách mà chúng ta có thể để tham chiếu một element trong DOM hoặc từ một class component con đến component cha. Điều này cho phép chúng ta đọc và chỉnh sửa các element đó.
Cách giải thích dễ hiểu nhất về React Refs là tưởng tượng nó là một cây cầu. Khi một element được gán vào một ref nó sẽ cho phép chúng ta sửa đổi cũng như truy cập vào element đó ngay lập tức và không cần sử dụng đến props hay state để component re-render. Nó giống cho phép việc can thiệp vào DOM như trong Javascript DOM
Chúng ta có thể can thiệp trực tiếp vào DOM qua refs mà không cần thông qua việc render. Mặc dù đây là cách để can thiệp vào DOM thuận tiện mà không cần phải sử dụng đến state, props nhưng điều này React không khuyến khích. Bởi khi các DOM bị thay đổi thì nó sẽ ảnh hưởng một phần nào đó đến quá trình render các component. Các bạn nên sử dụng React refs để can thiệp vào DOM trong trường hợp cần thiết.
Forwarding Refs là một kỹ thuật để tự động chuyển một ref từ một component tới component con, cho phép component cha có thể tham chiếu tới các element của component con để đọc và chỉnh sửa nó.
React cung cấp cho chúng ta một cách thức để thực hiện việc chuyển tiếp một ref, chúng ta sẽ bao component con trong React.forwardRef()
, ở đây mình có ví dụ:
Ví dụ bên trên mình đã sử dụng React.forwardRef()
, ở đây nó cung cấp cho chúng ta 2 tham số lần lượt là props
và refs
, cho chúng ta nhận về giá trị của props và refs từ component cha.
refs
Control focus, get text của DOM element, get state value(play/pause/timeline) của media playback,... nói chung là dùng trong những trường hợp các data này không cần đưa vào state
của component.
Trigger các transitions, animations: sử dụng refs
khi một element cần trigger animation/transition của một element khác
Tích hợp với các Third-party DOM libraries
Ở ví dụ này, chúng ta sẽ sử dụng userRef
để tham chiếu tới input element, sau đó sẽ thực hiện focus input khi click button
Ở ví dụ này; sẽ có 1 input, nhập một vài ký tự và thực hiện blur
input đó, chúng ta sẽ check xem previous value
, current value
sau mỗi lần blur input (case này trong thực tế là: nếu sau mỗi lần blur mà giá trị trước và sau khi blur có thay đổi thì thực hiện call api, ngược lại nếu không thay đổi thì không làm gì cả)
Sau khi hiểu về useRef
ở ví dụ trên, chúng ta sẽ hay gặp 1 trường hợp thực tế như sau: sau khi input data vào các field trên màn hình(route A) sau đó điều hướng sang route B, lúc này ta sẽ cần lưu các data trên màn hình vào redux store
như sau:
Chúng ta sử dụng useRef
để get tham chiếu đến DOM element
và thực hiện trigger animation
Demo:
Demo:
Demo:
Demo: