高阶组件 ----- 自定义hook 两种实现

React 自定义hook 的实现 必须是use开头
 
实例如下:
自定义组件:
 
import React,{ useEffect, useState} from 'react'
 
function Reuse() {
  const [xy,setXy] = useState({ x:0, y:0})
  const one = (e) => {
    setXy({
      x:e.clientX,
      y:e.clientY
    })
  }
  useEffect( () => {
    document.addEventListener('mousemove', one)
    return () => {
      document.removeEventListener('mousemove', one)
    }
  },[])
  return xy
}
 
export default Reuse
 
 
 
在页面里写:(使用自定义hook)
 
// import React, { Component } from 'react'
// import useReuse from '@@/Reuse'
// function Pop(props) {
//   const { x, y } = useReuse()
//   return (
//     <div>
//       {x}  ====  {y}
//     </div>
//   )
// }
 
// export default Pop
 
 
 
高阶组件就是 函数接收一个组件 并且最终返回一个组件
 
代码:
 
定义组件:
import React from 'react'
 
function HandleChange(HandleChange) {
  return class extends React.Component {
    state = {
      xy:{
        x:0,
        y:0,
      }
    }
    componentDidMount () {
      document.addEventListener('mousemove', evt => {
        this.setState({
          xy:{
            x:evt.clientX,
            y:evt.clientY
          }
        })
      })
    }
    render () {
      const { xy } =this.state
      return (
        <HandleChange xy = {xy} />
      )
    }
  }
}
 
export default HandleChange
 
在页面里使用:
 
// import HandleChange from '@@/HandleChange'
// export class Pop extends Component {
//   render() {
//     const { xy } =this.props
//     return (
//       <div>
//         鼠标的坐标:{xy.x} - {xy.y}
//       </div>
//     )
//   }
// }
 
// export default HandleChange(Pop)
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值