im sử dụng phản ứng và tôi có một thành phần chỉ đơn giản là cần hiển thị các con và thêm chúng vào một lớp theo điều kiện. Whats cách tốt nhất để làm điều đó?Phản ứng - thêm lớp học cho các thành phần con
Trả lời
I figured it out một tuần trước đây, đây là những gì tôi muốn:
export default class ContainerComponent extends React.Component {
constructor(props) {
super(props);
this.modifyChildren = this.modifyChildren.bind(this);
}
modifyChildren(child) {
const className = classNames(
child.props.className,
{...otherClassses}
);
const props = {
className
};
return React.cloneElement(child, props);
}
render() {
return (<div>
{React.Children.map(this.props.children, this.modifyChildren(child))}
</div>);
}
}
Tôi đã thử giải pháp này, tuy nhiên tôi nhận được một lỗi từ hàm render, "con không được định nghĩa." Nếu tôi thay đổi sang một hàm ẩn danh ở đó, thay vì gọi một phương thức lớp (this.modifyChildren trong ví dụ của bạn), lỗi sẽ biến mất và mọi thứ hoạt động tốt. Điều này làm việc với cả hai "mũi tên béo" và các hàm ẩn danh JS truyền thống. Không thể tìm ra lý do tại sao nó hoạt động cho bạn và không cho tôi khi mã của chúng tôi gần như giống hệt nhau. –
Bên trong làm cho phương pháp thành phần của bạn:
var childClasses = [],
childClassNames;
if (condition) {
childClasses.push('my-class-name');
}
childClassNames = childClasses.join(' ');
return (<div className={childClassNames}>
.... (your component here)
</div>);
Tôi không muốn làm điều đó trong mỗi thành phần, tôi muốn các thành phần có chứa chúng để làm thử nghiệm và thêm các lớp học nếu cần thiết – Pachu
Không chắc chắn chính xác những gì bạn đang cố gắng để đạt được. Thành phần cha mẹ của bạn có thể tính tất cả các lớp cần thiết và chuyển chúng làm đạo cụ cho trẻ em. – Maggie
Bạn có thể vượt qua một prop xuống cho đứa trẻ và nó có thể chọn những gì lớp để áp dụng (hoặc chỉ cần vượt qua tên lớp nhưng đây là ngữ nghĩa hơn):
Trong con bạn render:
const classes = [];
if (props.contentVisible)
classes.push('visible');
<div className={classes.join(' ')} />
- 1. Phản ứng: Cách nghe các sự kiện thành phần con
- 2. Phản ứng các thành phần chức năng và các thành phần cổ điển
- 3. Công cụ để kết hợp các lớp học một phần thành một lớp học?
- 4. phản ứng: Gọi phương thức của thành phần con từ thành phần gốc
- 5. thêm lớp học cho trẻ em này
- 6. mẹo để tạo thư viện thành phần cho các thành phần góc/phản ứng
- 7. Làm cách nào để tái cấu trúc các thành phần phản ứng với biến thành viên thành các lớp học es6
- 8. Thêm lớp học vào phần tử select2
- 9. Khởi tạo phản ứng thành phần nhà nước
- 10. jQuery trong thành phần phản ứng
- 11. phản ứng-router nhận được this.props.location trong các thành phần con
- 12. C# Các lớp học một phần
- 13. Làm thế nào để thêm lớp học cho con đầu tiên với jQuery?
- 14. động Rendering một Phản ứng thành phần
- 15. Hai cách xác định các thành phần phản ứng ES6
- 16. Tạo thành phần phản ứng động
- 17. Phản ứng router không render thành phần
- 18. Không thể sử dụng các hàm Arrow bên trong lớp thành phần phản ứng
- 19. Phản ứng: thêm các đạo cụ vào một thành phần hiện có
- 20. Các thành phần phản ứng không hiển thị
- 21. Chuyển đổi một lớp học thành một phần mở rộng
- 22. Nhiều trường hợp của cùng một thành phần phản ứng
- 23. es6 phản ứng nhận được đạo cụ trong thành phần con
- 24. truy cập phần tử gốc của phản ứng thành phần
- 25. Tìm các lớp học có sẵn trong Học phần
- 26. Phản ứng chỉ gắn kết Các phương pháp thành phần cho điều này - làm việc xung quanh?
- 27. Phản ứng sự kiện onClick trên thành phần
- 28. Grails - thêm tiêu đề cho tất cả các phản ứng
- 29. Phản ứng-Quê quán: Làm thế nào để quấn thành phần Trẻ em dưới một thành phần lớp
- 30. động thêm các phương pháp lớp học để một lớp
[This] (http://stackoverflow.com/questions/26863938/modify-attributes-of-children-in-reactjs-component) sẽ giúp bạn. –