# 组件划分原则 ### 一、单一原则 一个组件只做一件事。 遵循单一原则可以让我们的组件逻辑更简单,职责更明确,复用性更好。 拆分单一原则组件也更方便我们将无状态组件改写成函数组件,来优化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; ```