React的hooks---自定义hooks

通过自定义 Hook,可以将组件逻辑提取到可重用的函数中,在 Hook 特性之前,React 中有两种流行的方式来共享组件之间的状态逻辑:render props高阶组件,但此类解决方案会导致组件树的层级冗余等问题。而自定义 Hook 的使用可以很好的解决此类问题

创建自定义 Hook:

自定义 Hook 是一个函数,其名称以 "use" 开头,函数内部可以调用其他的 Hook。以下就是实时获取鼠标位置的自定义 Hook 实现:

复制代码
import { useEffect, useState } from "react"

export const useMouse = () => {
  const [position, setPosition] = useState({
    x: null,
    y: null
  });

  useEffect(() => {
    const moveHandler = (e) => {
      setPosition({
        x: e.screenX,
        y: e.screenY
      });
    };

    document.addEventListener('mousemove', moveHandler);
    return () => {
      document.removeEventListener('mousemove', moveHandler);
    };
  }, []);

  return position;
}

使用自定义 Hook:

自定义 Hook 的使用规则与 Hook 使用规则基本一致,以下是 useMouse 自定义 Hook 的使用过程:

复制代码
import React from 'react';
import { useMouse } from '../hooks/useMouse';

export default function MouseMove() {
  const { x, y } = useMouse();
  return (
    <>
      <p>Move mouse to see changes</p>
      <p>x position: {x}</p>
      <p>y position: {y}</p>
    </>
  );
}

每次使用自定义 Hook 时,React 都会执行该函数来获取独立的 state 和执行独立的副作用函数,所有 state 和副作用都是完全隔离的

相关推荐
大大杰哥几秒前
Vue2学习(3)--组件中的通信方式/组件之间的交互
java·前端·javascript
PixelBai2 分钟前
JSON过滤使用教程:从入门到精通
javascript·chrome·json
阿猫的故乡2 分钟前
Vue3自定义插件:封装一个全局消息提示插件,所有组件都能直接用
前端·javascript·vue.js
橘子星7 分钟前
树与二叉树:从概念到 JavaScript 实现
前端·javascript·面试
小小高不懂写代码7 分钟前
Transformer与注意力机制
前端·人工智能
AiClaw8 分钟前
AIClaw 的 Skills 机制:先注入索引,再按需读取完整说明
前端
YHHLAI8 分钟前
HTML5 Canvas 从入门到实战:画布绘图 · 帧动画 · 小游戏 · 数据可视化
前端·信息可视化·html5
前端 贾公子10 分钟前
npx skills:AI Agent Skill 的 npm,50+ 工具统一的 Skill 管理工具
前端
触底反弹12 分钟前
面试官问"Ajax原理",我从XHR讲到async/await,他直接懵了!
前端·面试·架构
Chelsea052214 分钟前
PC浏览器在线调试 Android 浏览器教程-chrome://inspect/#devices
android·前端·chrome