复合组件给与你⾜够的敏捷去定义⾃定义组件的外观和行为,这种方式更明确和安全。如果组件间有公用的非UI逻辑,将它们抽取为JS模块导⼊使⽤⽽不是继承它。

实现⼀个简单的复合组件,如Antd的Card

  1. import React, { Component } from 'react'
  2. function Card(props) {
  3. return <div className="card">
  4. {props.children}
  5. </div>
  6. }
  7. function Formbutton(props) {
  8. return (
  9. <div className="Formbutton">
  10. <button onClick= {props.children.defaultBtns.searchClick}>默认查询</button>
  11. <button onClick= {props.children.defaultBtns.resetClick}>默认重置</button>
  12. {props.children.btns.map((item, index) => {
  13. return <button key={'btn' + index} onClick= {item.onClick}>{item.title}</button>
  14. })
  15. }
  16. </div>
  17. )
  18. }
  19. function CompositionPage(props){
  20. return (
  21. <div>
  22. <Card>
  23. <p>我是内容</p>
  24. </Card>
  25. <Formbutton>
  26. {{defaultBtns: {
  27. searchClick: () => console.log('默认查询'),
  28. resetClick: () => console.log('默认重置')},
  29. btns: [{title: '查询',onClick: () => console.log('查询')},
  30. {title: '重置',onClick: () => console.log('重置')}
  31. ]}
  32. }
  33. </Formbutton>
  34. </div>
  35. )
  36. }