Bạn có thể sử dụng React.cloneElement
, tốt hơn là nên biết nó hoạt động như thế nào trước khi bạn bắt đầu sử dụng nó trong ứng dụng của mình. Nó được giới thiệu React v0.13
, đọc để biết thêm thông tin, vì vậy một cái gì đó cùng với công việc này cho bạn:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Vì vậy, hãy mang các dòng từ tài liệu React để bạn hiểu cách tất cả hoạt động và cách bạn có thể sử dụng chúng:
Trong React v0.13 RC2, chúng tôi sẽ giới thiệu một API mới, tương tự như React.addons.cloneWithProps, với chữ ký này:
React.cloneElement(element, props, ...children);
Không giống như cloneWithProps, chức năng mới này không có bất kỳ hành vi tích hợp ma thuật nào để hợp nhất kiểu và className vì lý do tương tự chúng ta không có tính năng đó từ transferPropsTo. Không ai chắc chắn chính xác danh sách đầy đủ các thứ ma thuật là gì, điều này gây khó khăn cho việc suy luận về mã và khó sử dụng lại khi phong cách có một chữ ký khác (ví dụ như trong React Native sắp tới).
React.cloneEuity gần như tương đương với:
<element.type {...element.props} {...props}>{children}</element.type>
Tuy nhiên, không giống như JSX và cloneWithProps, nó cũng bảo toàn refs. Điều này có nghĩa là nếu bạn có một đứa trẻ với một giới thiệu về nó, bạn sẽ không vô tình đánh cắp nó từ tổ tiên của bạn. Bạn sẽ nhận được cùng một tham chiếu đến yếu tố mới của bạn.
Một mô hình phổ biến là lập bản đồ cho con cái của bạn và thêm một chỗ dựa mới. Có nhiều vấn đề được báo cáo về cloneWithProps mất ref, khiến cho việc lập luận về mã của bạn trở nên khó khăn hơn. Bây giờ theo cùng một mẫu với cloneEuity sẽ hoạt động như mong đợi. Ví dụ:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Lưu ý: React.cloneE bổ sung (con, {ref: 'newRef'}) KHÔNG ghi đè lên ref nên hai cha mẹ vẫn không thể có một ref cho cùng một đứa trẻ, trừ khi bạn sử dụng ref-refs.
Đây là một tính năng quan trọng để vào React 0.13 vì các đạo cụ giờ đây không thay đổi. Đường dẫn nâng cấp thường là sao chép phần tử, nhưng bằng cách đó bạn có thể mất ref. Do đó, chúng tôi cần một đường dẫn nâng cấp đẹp hơn ở đây. Khi chúng tôi nâng cấp các cuộc gọi tại Facebook, chúng tôi nhận ra rằng chúng tôi cần phương pháp này. Chúng tôi đã nhận được phản hồi tương tự từ cộng đồng. Do đó, chúng tôi đã quyết định tạo một RC khác trước khi phát hành cuối cùng để đảm bảo chúng tôi có được điều này.
Chúng tôi dự định cuối cùng sẽ phản đối React.addons.cloneWithProps. Chúng tôi chưa làm điều đó, nhưng đây là một cơ hội tốt để bắt đầu suy nghĩ về việc sử dụng của riêng bạn và xem xét sử dụng React.cloneEuity thay thế. Chúng tôi chắc chắn sẽ gửi một bản phát hành với các thông báo phản đối trước khi chúng tôi thực sự xóa nó để không cần phải hành động ngay lập tức.
thêm ở đây ...