Xin lỗi, tôi nhận ra câu trả lời đầu tiên của mình (trong khi hy vọng vẫn cung cấp ngữ cảnh hữu ích / bổ sung) không trả lời câu hỏi của bạn. Hãy để tôi thử lại.
Bạn hỏi:
Tôi muốn chắc chắn rằng điều đó { component: Component, ...rest }
có nghĩa là:
Từ props
, nhận chỗ dựa Component
và sau đó là tất cả những thứ khác props
được cung cấp cho bạn, và đổi tên props
thành rest
để bạn có thể tránh các vấn đề đặt tên với hàm
props
được chuyển cho render
hàm Route
Diễn giải của bạn không hoàn toàn đúng. Tuy nhiên, dựa trên suy nghĩ của bạn, có vẻ như bạn ít nhất cũng biết thực tế rằng những gì đang xảy ra ở đây tương đương với một số loại cấu trúc đối tượng (xem câu trả lời thứ hai và nhận xét ở đó để làm rõ hơn).
Để đưa ra lời giải thích chính xác, hãy chia { component: Component, ...rest }
biểu thức thành hai phép toán riêng biệt:
- Thao tác 1: Tìm thuộc
component
tính được xác định trên props
( Lưu ý : c omponent viết thường ) và gán nó vào một vị trí mới ở trạng thái mà chúng ta gọi là Component
( Lưu ý : viết hoa C omponent).
- Thao tác 2: Sau đó, lấy tất cả các thuộc tính còn lại được xác định trên
props
đối tượng và thu thập chúng bên trong một đối số được gọi rest
.
Điểm quan trọng là bạn KHÔNG đổi tên props
thành rest
. (Và nó cũng không liên quan đến việc cố gắng "tránh các vấn đề đặt tên với hàm props
được truyền cho render
hàm Route ".)
rest === props;
Bạn chỉ đơn giản là rút phần còn lại (do đó tại sao đối số được đặt tên như vậy) của các thuộc tính được xác định trên props
đối tượng của bạn thành một đối số mới được gọi rest
.
Ví dụ sử dụng
Đây là một ví dụ. Giả sử chúng ta có một đối tượng `myObj` được định nghĩa như sau:
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
Đối với ví dụ này, có thể hữu ích nếu bạn nghĩ về props
việc có cùng cấu trúc ( tức là các thuộc tính và giá trị) như được hiển thị trong myObj
. Bây giờ, chúng ta hãy viết bài tập sau.
const { name: Username, ...rest } = myObj
Câu lệnh trên tương ứng với cả việc khai báo và gán hai biến (hoặc, tôi đoán là hằng số). Tuyên bố có thể được coi là:
Lấy thuộc tính name
được xác định trên myObj
và gán giá trị của nó cho một biến mới mà chúng tôi gọi Username
. Sau đó, phải mất bất cứ điều gì các tài sản khác được xác định trên myObj
( tức là , age
, sex
và dob
) và thu thập chúng vào một đối tượng mới được gán cho tên biến chúng ta rest
.
Logging Username
và rest
đến console
sẽ xác nhận điều này. Chúng tôi có những điều sau:
console.log(Username);
console.log(rest);
Ghi chú bên lề
Bạn có thể tự hỏi:
Tại sao lại gặp khó khăn khi rút component
tài sản ra chỉ để đổi tên nó Component
bằng một chữ cái in hoa "C"?
Vâng, nó có vẻ khá tầm thường. Và, mặc dù nó là một thực hành React tiêu chuẩn, nhưng có một lý do tại sao tất cả các tài liệu của Facebook về framework của nó đều được viết như vậy. Cụ thể, việc viết hoa các thành phần tùy chỉnh được hiển thị bằng JSX không phải là một thực tiễn mà nó là một điều cần thiết. React hay nói đúng hơn là JSX phân biệt chữ hoa chữ thường . Các thành phần tùy chỉnh được chèn mà không có chữ cái đầu tiên viết hoa sẽ không được hiển thị cho DOM. Đây chỉ là cách React đã tự định nghĩa để xác định các thành phần tùy chỉnh. Như vậy, có ví dụ không đổi tên bổ sung các component
tài sản đó đã được kéo ra khỏi props
đến Component
, các <component {...props} />
biểu hiện sẽ không hiển thị đúng.