# 组件划分原则
### 一、单一原则
一个组件只做一件事。
遵循单一原则可以让我们的组件逻辑更简单,职责更明确,复用性更好。
拆分单一原则组件也更方便我们将无状态组件改写成函数组件,来优化react性能。
```
//bad
class Panel extends Component{
render() {
return (
)
}
}
//good
function PanelHeader(props) {
return (
)
}
function PanelBody(props) {
return (
)
}
function PanelHFooter(props) {
return (
)
}
class Panel extends Component{
render() {
return (
)
}
}
```
### 二、通用原则
我们的基础组件,只包含业务中最常用的功能和适用性最广的DOM结构。
### 三、可扩展原则
组件提供最灵活的扩展性。
- 每一个提供样式的DOM结构都允许用户传入class和style来修改样式。
- 每一个UI展示部分都提供接口允许用户替换。组件只封装交互逻辑和提供默认的组件内容。
- 对于封装逻辑的组件可以允许用户传入展示部分组件。
- 逻辑组件允许用户扩展包裹的dom元素,即允许用户传入component(props, react元素或dom元素的字符串)
来替换我们默认包裹的dom元素。
- 样式扩展
```
class Example extends Component{
render() {
let {className, style} = this.props;
return (
)
}
}
```
- 组件内容扩展
```
//默认给定一个图标
let defaultProps = {
closeIcon:
}
class Tile extends Component{
render() {
//允许用户传入自定义的图标或按钮
let { closeIcon } = this.props;
let
return (
{ React.cloneElement(closeIcon, { className: "close-btn", onClick: this.close }) }
...
)
}
}
Tile.defaultProps = defaultProps;
```