You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/docs/forwarding-refs.md
+16-16Lines changed: 16 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,49 +1,49 @@
1
1
---
2
2
id: forwarding-refs
3
-
title: Forwarding Refs
3
+
title: Chuyển Tiếp Refs
4
4
permalink: docs/forwarding-refs.html
5
5
---
6
6
7
-
Ref forwarding là một kỹ thuật để tự động chuyển một [ref](/docs/refs-and-the-dom.html) qua một thành phần đến một trong các thành phần con của nó. Điều này thường không cần thiết đối với hầu hết các thành phần trong ứng dụng. Tuy nhiên, nó có thể hữu ích cho một số loại thành phần, đặc biệt là trong các thư viện thành phần có thể tái sử dụng. Các tình huống phổ biến nhất được mô tả dưới đây.
7
+
Chuyển tiếp Refs là một kỹ thuật để tự động chuyển một [ref](/docs/refs-and-the-dom.html) qua một component đến một trong các component con của nó. Điều này thường không cần thiết đối với hầu hết các components trong ứng dụng. Tuy nhiên, nó có thể hữu ích cho một số loại component, đặc biệt là trong các thư viện component có thể tái sử dụng. Các tình huống phổ biến nhất được mô tả dưới đây.
8
8
9
-
## Forwarding refs tới các thành phần DOM {#forwarding-refs-to-dom-components}
9
+
## Chuyển tiếp refs tới các DOM components {#forwarding-refs-to-dom-components}
10
10
11
-
Hãy xem xét thành phần`FancyButton` hiển thị phần tử DOM của `button` gốc:
11
+
Hãy xem xét component`FancyButton` hiển thị phần tử DOM của `button` gốc:
12
12
`embed:forwarding-refs/fancy-button-simple.js`
13
13
14
-
Các thành phần React ẩn chi tiết triển khai của chúng, bao gồm cả đầu ra được hiển thị của chúng. Các thành phần khác sử dụng `FancyButton`**thường sẽ không cần**[lấy tham chiếu](/docs/refs-and-the-dom.html) đến phần tử DOM của `button` bên trong. Điều này là tốt vì nó ngăn các thành phần dựa vào cấu trúc DOM của nhau quá nhiều.
14
+
Các React components ẩn chi tiết triển khai của chúng, bao gồm cả đầu ra được hiển thị của chúng. Các components khác sử dụng `FancyButton`**thường sẽ không cần**[lấy tham chiếu](/docs/refs-and-the-dom.html) đến phần tử DOM của `button` bên trong. Điều này là tốt vì nó ngăn các components dựa vào cấu trúc DOM của nhau quá nhiều.
15
15
16
-
Mặc dù việc đóng gói như vậy là mong muốn đối với các thành phần cấp ứng dụng như `FeedStory` hoặc `Comment`, nhưng nó có thể gây bất tiện cho các thành phần “leaf” có thể tái sử dụng cao như `FancyButton` hoặc `MyTextInput`. Các thành phần này có xu hướng được sử dụng trong toàn bộ ứng dụng theo cách tương tự như `button` và `input` DOM thông thường, và việc truy cập vào các nút DOM của chúng có thể không thể tránh khỏi để quản lý tiêu điểm, lựa chọn hoặc hoạt ảnh.
16
+
Mặc dù việc đóng gói như vậy là mong muốn đối với các components cấp ứng dụng như `FeedStory` hoặc `Comment`, nhưng nó có thể gây bất tiện cho các components “leaf” có thể tái sử dụng cao như `FancyButton` hoặc `MyTextInput`. Các components này có xu hướng được sử dụng trong toàn bộ ứng dụng theo cách tương tự như `button` và `input` DOM thông thường, và việc truy cập vào các DOM nodes của chúng có thể không thể tránh khỏi để quản lý tiêu điểm, lựa chọn hoặc hoạt ảnh.
17
17
18
-
**Ref forwarding là một tính năng chọn tham gia cho phép một số thành phần nhận `tham chiếu` mà chúng nhận được và chuyển tiếp nó xuống (nói cách khác, “chuyển tiếp” nó) cho thành phần con.**
18
+
**Chuyển tiếp Ref là một tính năng chọn tham gia cho phép một số components nhận `tham chiếu` mà chúng nhận được và chuyển tiếp nó xuống (nói cách khác, “chuyển tiếp” nó) cho thành phần con.**
19
19
20
20
Trong ví dụ dưới đây, `FancyButton` sử dụng `React.forwardRef` để lấy `ref` được chuyển đến nó, sau đó chuyển tiếp nó đến DOM `button` mà nó hiển thị:
Bằng cách này, các thành phần sử dụng `FancyButton` có thể nhận được tham chiếu đến DOM `button` bên dưới và truy cập nó nếu cần - giống như nếu chúng sử dụng trực tiếp DOM `button`.
24
+
Bằng cách này, các components sử dụng `FancyButton` có thể nhận được tham chiếu đến DOM `button` bên dưới và truy cập nó nếu cần - giống như nếu chúng sử dụng trực tiếp DOM `button`.
25
25
26
26
Dưới đây là giải thích từng bước về những gì xảy ra trong ví dụ trên:
27
27
28
28
1. Chúng ta tạo một [React ref](/docs/refs-and-the-dom.html) bằng cách gọi `React.createRef` và gán nó cho một biến` ref`.
29
29
1. Chúng ta chuyển `ref` xuống`<FancyButton ref={ref}>` bằng cách chỉ định nó như một thuộc tính JSX.
30
30
1. React chuyển `ref` tới hàm `(props, ref) => ...` bên trong `forwardRef` như một đối số thứ hai.
31
31
1. Chúng ta chuyển tiếp đối số `ref` này xuống `<button ref={ref}>` bằng cách chỉ định nó làm thuộc tính JSX.
32
-
1. Khi ref được đính kèm, `ref.current` sẽ trỏ đến nút DOM `<button>`.
32
+
1. Khi ref được đính kèm, `ref.current` sẽ trỏ đến DOM node`<button>`.
33
33
34
34
>Chú ý
35
35
>
36
-
>Đối số `ref` thứ hai chỉ tồn tại khi bạn xác định một thành phần với lệnh gọi `React.forwardRef`. Các function hoặc class component thông thường không nhận được đối số `ref` và ref cũng không có sẵn trong các props.
36
+
>Đối số `ref` thứ hai chỉ tồn tại khi bạn xác định một component với lệnh gọi `React.forwardRef`. Các function hoặc class component thông thường không nhận được đối số `ref` và ref cũng không có sẵn trong các props.
37
37
>
38
-
>Ref forwarding không giới hạn đối với các thành phần DOM. Bạn cũng có thể chuyển tiếp các refs đến các cá thể thành phần của lớp.
38
+
>Chuyển tiếp Ref không giới hạn đối với các DOM components. Bạn cũng có thể chuyển tiếp các refs đến các class component cá thể.
39
39
40
40
## Lưu ý cho người bảo trì thư viện component {#note-for-component-library-maintainers}
41
41
42
42
**Khi bạn bắt đầu sử dụng `forwardRef` trong thư viện component, bạn nên coi nó như một thay đổi đột phá và phát hành một phiên bản chính mới của thư viện của bạn.** Điều này là do thư viện của bạn có thể có một hành vi khác nhau có thể quan sát được (chẳng hạn như những ref được gán cho, và những loại được xuất ra) và điều này có thể phá vỡ các ứng dụng và thư viện khác phụ thuộc vào hành vi cũ.
43
43
44
44
Việc áp dụng có điều kiện `React.forwardRef` khi nó tồn tại cũng không được khuyến khích vì những lý do tương tự: nó thay đổi cách thư viện của bạn hoạt động và có thể phá vỡ ứng dụng của người dùng khi họ tự nâng cấp React.
45
45
46
-
## Forwarding refs trong higher-order components {#forwarding-refs-in-higher-order-components}
46
+
## Chuyển tiếp refs trong higher-order components {#forwarding-refs-in-higher-order-components}
47
47
48
48
Kỹ thuật này cũng có thể đặc biệt hữu ích với [higher-order components](/docs/higher-order-components.html) (còn được gọi là HOCs). Hãy bắt đầu với một HOC mẫu logs ra các props vào console:
49
49
`embed:forwarding-refs/log-props-before.js`
@@ -56,18 +56,18 @@ Có một lưu ý cho ví dụ trên: refs sẽ không được chuyển qua. Đ
56
56
Điều này có nghĩa là các refs dành cho component `FancyButton` của chúng ta sẽ thực sự được gắn vào component `LogProps`:
57
57
`embed:forwarding-refs/fancy-button-ref.js`
58
58
59
-
May mắn thay, chúng ta có thể chuyển tiếp rõ ràng các refs đến thành phần `FancyButton` bên trong bằng cách sử dụng API `React.forwardRef`. `React.forwardRef` chấp nhận một hàm kết xuất nhận các tham số `props` và `ref` và trả về một nút React. Ví dụ:
59
+
May mắn thay, chúng ta có thể chuyển tiếp rõ ràng các refs đến thành phần `FancyButton` bên trong bằng cách sử dụng API `React.forwardRef`. `React.forwardRef` chấp nhận một hàm render nhận các tham số `props` và `ref` và trả về một React node. Ví dụ:
60
60
`embed:forwarding-refs/log-props-after.js`
61
61
62
62
## Hiển thị tên tùy chỉnh trong DevTools {#displaying-a-custom-name-in-devtools}
63
63
64
-
`React.forwardRef` chấp nhận một hàm kết xuất. React DevTools sử dụng chức năng này để xác định những gì sẽ hiển thị cho thành phần chuyển tiếp ref.
64
+
`React.forwardRef` chấp nhận một hàm render. React DevTools sử dụng chức năng này để xác định những gì sẽ hiển thị cho component chuyển tiếp ref.
65
65
66
-
Ví dụ, thành phần sau sẽ xuất hiện dưới dạng "*ForwardRef*" trong DevTools.
66
+
Ví dụ, component sau sẽ xuất hiện dưới dạng "*ForwardRef*" trong DevTools.
67
67
68
68
`embed:forwarding-refs/wrapped-component.js`
69
69
70
-
Nếu bạn đặt tên cho hàm hiển thị, DevTools cũng sẽ bao gồm tên của nó (ví dụ: "*ForwardRef(myFunction)*"):
70
+
Nếu bạn đặt tên cho hàm render, DevTools cũng sẽ bao gồm tên của nó (ví dụ: "*ForwardRef(myFunction)*"):
0 commit comments