render-props高阶组件
function WithMouse(WiappedComponent){
class Mouse extends React.Component{
// 鼠标位置state
state={
x:0,
y:0
}
handleMouseMove=(e)=>{
this.setState({
x:e.clientX,
y:e.clientY
})
}
// 监听鼠标移动事件//在组件渲染完成之后调用
componentDidMount() {
window.addEventListener('mousemove',this.handleMouseMove)
}
render(){
// return this.props.render(this.state)
return <WiappedComponent {...this.state} />
}
}
return Mouse
}
// 把最后要展示的UI给封装起来
function Position(props) {
return (
<p>
X:{props.x}
Y:{props.y}
</p>
)
}
// 把position 组件来进行包装
let MousePosition = WithMouse(Position)
class App extends React.Component {
constructor(props) {
super(props)
}
render() {
return (
<div>
高阶组件
<MousePosition></MousePosition>
</div>
)
}
}
// ReactDOM.render(<WiappedComponent ></WiappedComponent>,document.getElementById('root'))
ReactDOM.render(<App></App>,document.getElementById('root'))