逻辑复用
简单来说就是使用自定义hook可以将某些组件逻辑提取到可重用的函数中。 自定义hook是一个从use开始的调用其他hook的Javascript函数。
例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进行逻辑复用
我们提取以上两个例子里可以复用的逻辑代码,新建一个名为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> )
很明显使代码量减少了
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
长按识别二维码并关注微信
更方便到期提醒、手机管理