react通过displayNameshiyong
设置displayName控制区分不同的组件
//导入react
import React from 'react'
import ReactDOM from 'react-dom'
//导入组件
// 约定1:类组件必须以大写字母开头
// 约定2:类组件应该继承react.component父类 从中可以使用父类的方法和属性
// 约定3:组件必须提供render方法
// 约定4:render方法必须有返回值
import img from "./1.png"
//创建高阶组件
function withMouse(WrappedComponent){ class Mouse extends React.Component{ //鼠标状态 state={ x:0, y:0 } componentDidMount=()=>{ window.addEventListener('mousemove',this.handeleMove) } handeleMove=e=>{ this.setState({ x:e.clientX, y:e.clientY }) } componentWillUnmount(){ window.removeEventListener('mousemove',this.handeleMove) } render(){ return <WrappedComponent {...this.state}>WrappedComponent> } } Mouse.displayName=`WithMouse${getDisPlayName(WrappedComponent)}` return Mouse } function getDisPlayName(WrappedComponent){ return WrappedComponent.displayName||WrappedComponent.name||'component' } const Position=props=> (<p>鼠标当前位置:(x:{props.x},y:{props.y})p>) const Cat=props=>( <img src={img} alt="猫" style={{position:"absolute", top:props.y, left:props.x, width:"100px", height:"100px"}}/> ) const MousePosition=withMouse(Position) const CatPosition=withMouse(Cat) class App extends React.Component { constructor(props) { super(props) console.log('生命周期钩子函数:construtor') } //初始化state //1进行dom操作 //2发送网络请求 render() { console.log('生命周期钩子函数:render') return ( <div id="title"> <h1>render props模式h1> <MousePosition>MousePosition> <CatPosition>CatPosition> div> ) } } ReactDOM.render(<App>App>, document.getElementById('root'))