React HOC 高阶组件例子
WrappedComponent 高阶组件
定义:高阶组件是以参数为组件 返回值为新组建的函数
作用: 复用状态逻辑
高阶组件例子代码如下:
实现的复用逻辑为鼠标滑过获取最新的鼠标坐标(clintX,clintY)
import React from 'react'
// 参数1是传递的组件,参数2是类名
export default function hoc (WrappedComponent, classed) {
// 返回一个新的组件
return class extends React.Component {
constructor (props) {
super(props)
this.state = { // 初始化state
xy: { x:0, y:0 },
classed
}
}
componentDidMount () {
// 组件挂载完后,根据传递的类名获取元素
const el = document.querySelector(this.state.classed)
// 给元素添加鼠标滑过事件
el.addEventListener('mousemove', evt => {
this.setState({
// 获取鼠标位置,修改state值
xy: { x: evt.clientX, y: evt.clientY }
})
})
}
render () {
const { xy } = this.state // 将每次更新的值获取
return (
// 调用传进来的组件 给组件传值,这里相当与调用传进来的组件,然后父传子,子组件就可以通过props进行接收
<WrappedComponent xy={xy} />
)
}
}
}
进行调用
import React, { Component } from 'react'
import hoc from '../hoc' // 引入高阶组件
class Shop extends Component {
render() {
return (
<div className="pages-shop">
shop
</div>
)
}
}
export default hoc(Shop, '.pages-shop')
// 默认抛出高阶组件,将当前组件作为第一个参数,div类名作为第二个参数
浙公网安备 33010602011771号