高阶组件不是一种功能,而是一种模式
// 高阶组件 基本用法const HOCFactory = (Component) => {class HOC extends React.Component {// 在此定义多个组件的公共逻辑render () {return <Component {...thi.props} /> // 返回拼装的结果}}return HOC}const MyComponent1 = HOCFactory(WrappedComponent1)const MyComponent2 = HOCFactory(WrappedComponent2)
import React from 'react'// 高阶组件const withMouse = (Component) => {class withMouseComponent extends React.Component {constructor(props) {super(props)this.state = { x: 0, y: 0 }}handleMouseMove = (event) => {this.setState({x: event.clientX,y: event.clientY})}render() {return (<div style={{ height: '500px' }} onMouseMove={this.handleMouseMove}>{/* 1. 透传所有 props 2. 增加 mouse 属性 */}<Component {...this.props} mouse={this.state}/></div>)}}return withMouseComponent}const App = (props) => {const a = props.aconst { x, y } = props.mouse // 接收 mouse 属性return (<div style={{ height: '500px' }}><h1>The mouse position is ({x}, {y})</h1><p>{a}</p></div>)}export default withMouse(App) // 返回高阶函数
