自定义hook-副作用

2020-06-23  本文已影响0人  skoll

简介

1 .自定义Hook更像是一种约定,而不是一种功能。如果函数以use开头,并且调用了其他的hook,那么就可以称之为一个自定义hook
2 .hook是一种复用状态逻辑的方式,但是他不复用state本身
3 .事实上,每一次调用都有一个完全独立的state

检测窗口的宽度

1 .代码

function useWidth(props){
    const [width,setWidth]=useState(document.body.clientWidth)

    function handleChange(e){
        setWidth(document.body.clientWidth)
    }

    useEffect(()=>{
        window.addEventListener('resize',handleChange,false)

        return ()=>{
            window.removeEventListener('resize',handleChange,false)
        }
    })
    return width
    
}
export default useWidth

检测鼠标移动位置

// 封装一段检测鼠标移动的代码
function useMouse(props){
    const [isEffect,setEffect]=useState(props.isEffect)
    const [mouse,setMouse]=useState({x:0,y:0})

    // 如何从外部控制是否要执行这个操作呢?传入一个变量来控制,好像我是无法动态向他传入一个参数来改变里面的逻辑的。只有根据if判断使用另一个组件里面传入不同参数的hook

    function handleMouseMove(e){
        setMouse({
            x:e.clientX,
            y:e.clientY
        })
    }

    useEffect(()=>{
        document.documentElement.addEventListener("mousemove",handleMouseMove,false)
        return ()=>{
            document.documentElement.removeEventListener("mousemove",handleMouseMove,false)
        }
    })
    // 直接把mouseMove事件绑定在全局界面上,然后返回最后输出的结果

    return mouse
}
上一篇下一篇

猜你喜欢

热点阅读