您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

教你在react中创建自定义hooks

51自学网 2022-02-21 13:37:42
  javascript

一、什么是自定义hooks

逻辑复用

        简单来说就是使用自定义hook可以将某些组件逻辑提取到可重用的函数中。 自定义hook是一个从use开始的调用其他hook的Javascript函数。

二、不使用自定义hook时

例1:当我们整个页面需要获取用户鼠标移动的坐标时,不使用hook的代码,我们可以这样写

  const [position, setPosition] = useState({    x: 0,    y: 0  })  useEffect(() => {    const move = (e) => {      setPosition({ x: e.x, y: e.y })    }    document.addEventListener('mousemove', move)    return () => {      document.removeEventListener('mousemove', move)    }  }, [])  return (    <div>      x:{position.x}      y:{position.y}    </div>  )

 例2:当我们页面中有一个图片要跟随鼠标移动时,不使用hook的代码,我们也可以这样写:

const [position, setPosition] = useState({    x: 0,    y: 0  })  useEffect(() => {    const move = (e) => {      setPosition({ x: e.x, y: e.y })    }    document.addEventListener('mousemove', move)    return () => {      document.removeEventListener('mousemove', move)    }  }, [])  return (    <div>      <img        src={img}        style={{          position: 'absolute',          top: position.y,          left: position.x,        }}        alt=""      />    </div>  )

很明显,以上两个例子呈现效果不同,但使用的逻辑代码大部分相同时,这些逻辑代码我们就可以使用hook进行逻辑复用

三、使用自定义hook

我们提取以上两个例子里可以复用的逻辑代码,新建一个名为useMousePosition的文件

import { useState, useEffect } from 'react'export default function useMousePosition() {  const [position, setPosition] = useState({    x: 0,    y: 0  })  useEffect(() => {    const move = (e) => {      setPosition({ x: e.x, y: e.y })    }    document.addEventListener('mousemove', move)    return () => {      document.removeEventListener('mousemove', move)    }  }, [])  return position}

        我们在useMousePosition函数中提取了此功能。现在,我们可以将其导入到要使用的任何位置!

        最后像使用普通函数那样使用即可 

  const position = useMousePosition()  return (    <div>      x:{position.x}      y:{position.y}    </div>  )

        很明显使代码量减少了

到此这篇关于react中创建自定义hooks的文章就介绍到这了,更多相关react自定义hooks内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


下载地址:
JS实现元素的拖动与占位功能
通过vue方式实现二维码扫码功能
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。