当前位置: 首页 > news >正文

asp网站做文件共享上传手机个别网页打不开

asp网站做文件共享上传,手机个别网页打不开,动漫设计和动画设计,金华网站开发什么是 ahooks? ahooks 是一个 React Hooks 库,提供了大量实用的自定义 hooks,帮助开发者更高效地构建 React 应用。其中生命周期类 hooks 是 ahooks 的一个重要分类,专门用于处理组件的生命周期事件。 安装 ahooks npm instal…

什么是 ahooks?

ahooks 是一个 React Hooks 库,提供了大量实用的自定义 hooks,帮助开发者更高效地构建 React 应用。其中生命周期类 hooks 是 ahooks 的一个重要分类,专门用于处理组件的生命周期事件。

安装 ahooks

npm install ahooks

生命周期类 hooks 详解

useMount – 组件挂载

useMount 用于在组件挂载时执行副作用操作,类似于 useEffect 的空依赖数组。

import React, { useState } from "react";
import { useMount } from "ahooks";
import { Card, Button, List, message } from "antd";const UseMountExample = () => {const [data, setData] = useState([]);const [loading, setLoading] = useState(false);useMount(() => {console.log("组件已挂载,开始初始化数据...");fetchInitialData();});const fetchInitialData = async () => {setLoading(true);try {// 模拟API调用await new Promise((resolve) => setTimeout(resolve, 1000));const mockData = [{ id: 1, name: "张三", email: "zhangsan@example.com" },{ id: 2, name: "李四", email: "lisi@example.com" },{ id: 3, name: "王五", email: "wangwu@example.com" },];setData(mockData);message.success("数据加载完成");} catch (error) {message.error("数据加载失败");console.error("数据加载错误:", error);} finally {setLoading(false);}};const handleRefresh = () => {fetchInitialData();};return (<div><Card title="useMount 组件挂载示例" style={{ marginBottom: 16 }}><div style={{ marginBottom: 16 }}><Button type="primary" onClick={handleRefresh} loading={loading}>刷新数据</Button><span style={{ marginLeft: 8, color: "#666" }}>组件挂载时会自动加载数据</span></div><Listloading={loading}dataSource={data}renderItem={(item) => (<List.Item><List.Item.Meta title={item.name} description={item.email} /></List.Item>)}/></Card><Card title="useMount 使用场景" size="small"><ul><li>组件初始化时获取数据</li><li>设置全局事件监听器</li><li>初始化第三方库</li><li>执行一次性的副作用操作</li></ul></Card></div>);
};export default UseMountExample;

useUnmount – 组件卸载

useUnmount 用于在组件卸载时执行清理操作,类似于 useEffect 的清理函数。

import React, { useState } from "react";
import { useUnmount } from "ahooks";
import { Card, Button, message, Alert } from "antd";const UseUnmountExample = () => {const [isVisible, setIsVisible] = useState(true);const [eventCount, setEventCount] = useState(0);// 模拟全局事件监听器const handleGlobalClick = () => {setEventCount((prev) => prev + 1);};// 组件卸载时清理事件监听器useUnmount(() => {console.log("组件即将卸载,清理事件监听器...");document.removeEventListener("click", handleGlobalClick);message.info("组件已卸载,事件监听器已清理");});// 添加事件监听器React.useEffect(() => {document.addEventListener("click", handleGlobalClick);console.log("事件监听器已添加");}, []);const handleToggleVisibility = () => {setIsVisible(!isVisible);};return (<div><Card title="useUnmount 组件卸载示例" style={{ marginBottom: 16 }}><div style={{ marginBottom: 16 }}><Button type="primary" onClick={handleToggleVisibility}>{isVisible ? "隐藏组件" : "显示组件"}</Button></div>{isVisible && (<div><Alertmessage="组件已挂载"description="点击页面任意位置会增加计数,组件卸载时会清理事件监听器"type="success"showIconstyle={{ marginBottom: 16 }}/><Card title="事件统计" size="small"><p><strong>全局点击次数:</strong> {eventCount}</p><p style={{ color: "#666", fontSize: "12px" }}>点击"隐藏组件"按钮来触发组件卸载,观察控制台输出</p></Card></div>)}</Card><Card title="useUnmount 使用场景" size="small"><ul><li>清理事件监听器</li><li>取消网络请求</li><li>清理定时器</li><li>保存用户数据</li><li>清理第三方库实例</li></ul></Card></div>);
};export default UseUnmountExample;

useUnmountedRef – 组件卸载状态引用

useUnmountedRef 返回一个 ref,用于判断组件是否已经卸载,避免在组件卸载后执行异步操作。

import React, { useState } from "react";
import { useUnmountedRef } from "ahooks";
import { Card, Button, List, message, Tag } from "antd";const UseUnmountedRefExample = () => {const [data, setData] = useState([]);const [loading, setLoading] = useState(false);const [requestCount, setRequestCount] = useState(0);const unmountedRef = useUnmountedRef();const fetchData = async (requestId) => {setLoading(true);setRequestCount((prev) => prev + 1);try {// 模拟异步请求await new Promise((resolve) => setTimeout(resolve, 2000));// 检查组件是否已卸载if (unmountedRef.current) {console.log(`请求 ${requestId} 完成,但组件已卸载,不更新状态`);return;}const mockData = Array.from({ length: 5 }, (_, index) => ({id: Date.now() + index,name: `用户 ${requestId}-${index + 1}`,email: `user${requestId}-${index + 1}@example.com`,timestamp: new Date().toLocaleTimeString(),}));setData(mockData);message.success(`请求 ${requestId} 完成`);console.log(`请求 ${requestId} 完成,组件状态已更新`);} catch (error) {if (!unmountedRef.current) {message.error(`请求 ${requestId} 失败`);console.error(`请求 ${requestId} 错误:`, error);}} finally {if (!unmountedRef.current) {setLoading(false);}}};const handleStartRequest = () => {const requestId = Date.now();fetchData(requestId);};const handleUnmount = () => {// 模拟组件卸载console.log("模拟组件卸载...");// 在实际应用中,这里会触发组件的卸载};return (<div><Cardtitle="useUnmountedRef 卸载状态检测示例"style={{ marginBottom: 16 }}><div style={{ marginBottom: 16 }}><Buttontype="primary"onClick={handleStartRequest}loading={loading}style={{ marginRight: 8 }}>发起异步请求</Button><Button onClick={handleUnmount}>模拟卸载</Button></div><div style={{ marginBottom: 16 }}><Tag color="blue">请求次数: {requestCount}</Tag><Tag color={loading ? "orange" : "green"}>状态: {loading ? "加载中" : "空闲"}</Tag></div><ListdataSource={data}renderItem={(item) => (<List.Item><List.Item.Metatitle={item.name}description={<div><div>{item.email}</div><div style={{ fontSize: "12px", color: "#666" }}>创建时间: {item.timestamp}</div></div>}/></List.Item>)}/></Card><Cardtitle="useUnmountedRef 使用场景"size="small"style={{ marginBottom: 16 }}><ul><li>防止内存泄漏</li><li>避免在组件卸载后更新状态</li><li>取消异步操作</li><li>清理定时器</li><li>处理竞态条件</li></ul></Card></div>);
};export default UseUnmountedRefExample;

生命周期类 hooks 速查表

Hook 名称用途描述
useMount组件挂载在组件挂载时执行副作用操作,类似于 useEffect 的空依赖数组
useUnmount组件卸载在组件卸载时执行清理操作,类似于 useEffect 的清理函数
useUnmountedRef卸载状态检测返回一个 ref,用于判断组件是否已经卸载,避免在组件卸载后执行异步操作

 React强大且灵活hooks库——ahooks入门实践之生命周期类hook(lifecycle)详解 - 高质量源码分享平台-免费下载各类网站源码与模板及前沿动态资讯

http://www.dtcms.com/a/495491.html

相关文章:

  • 做网站图网页搭建环境
  • 山西 网站制作wifi扩展器做网站
  • 利用VOSviewer快速可视化文献全过程(以Web of science为例)
  • appcms程序怎么做网站网站管理公司
  • [Qt] 什么是qmake与cmake
  • DevOps学习笔记
  • DevOps是什么,有什么作用,一般用来干嘛
  • Go语言:关于导包的两个重要说明
  • 21 种网络攻击方式,如何有效防护!
  • 工厂 电商网站建设WordPress网易云插卡
  • STM32H743-ARM例程23-USB_HID
  • 丽水微信网站建设哪家好阿里巴巴国际站坑人
  • 网站通知发送邮件广州 深圳 外贸网站建设公司
  • LOL实时数据推送技术揭秘:WebSocket在电竞中的应用
  • STC89C52RC---坤坤铁山靠
  • 幽冥大陆(十五)SIM300 拨打电话和短信——东方仙盟筑基期
  • SpringBoot校园二手商城系统
  • 贸易网站建设一个网站建设需要多少钱
  • 网站查询空间商企业不开了网站备案吗
  • iframe内嵌子系统可返回
  • 【读书笔记】《巨人的工具》
  • 【实战详解】MySQL 8.0递归查询终极教程:附组织架构/分类树完整代码
  • 最新网站开发工具东莞推广外包
  • 双目测距实战3-立体匹配
  • 战斗系统架构:为什么游戏战斗适合ECS架构?
  • 【C语言加油站】C语言文件操作完全指南:feof、ferror与缓冲区机制详解
  • 做seo怎么设计网站响应式网站软件
  • 怎么样建网站卖东西可以入侵的网站
  • 17、Centos9 安装 1Panel
  • Linux学习笔记--GPIO控制器驱动