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

大楼物流公司网站源码抖音推广渠道有哪些

大楼物流公司网站源码,抖音推广渠道有哪些,电子商务网站建设的四个步骤,知名电子商务企业有哪些什么是 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/wzjs/32247.html

相关文章:

  • wordpress yoast设置seo系统培训哪家好
  • 万网如何上传静态网站百度大搜
  • 设计师推荐网站欣赏网络推广专员所需知识
  • 电商网站运维怎么做品牌策划公司哪家好
  • 怎么建设公司小程序网站自己可以创建网站吗
  • 设计精美的中文网站简述网络营销的概念
  • 软件开发培训需要多少钱东莞网站建设seo
  • 网站外链优化网站首页制作网站
  • 网站换域名了怎么做301重定向最新的疫情最新消息
  • 建设企业网站步骤qq推广网站
  • 用web做购物网站怎么做搜索网络广告推广方法
  • 淘宝客返利网站开发杭州最专业的seo公司
  • 长沙做企业网站推广的公司网店培训教程
  • 廊坊微信网站建设nba实力榜最新排名
  • 网站兼容模式怎么设置重庆放心seo整站优化
  • 设计师如何做自己的个人网站企业推广网站有哪些
  • 做门户网站的公司有哪些seo品牌优化
  • 传媒网站建设网重庆网站优化公司
  • 做网站需要的信息太原互联网推广公司
  • 跨境电商东莞网站建设域名注册信息怎么查
  • 网站运行需求正规seo需要多少钱
  • 大理企业网站建设泰州seo网络公司
  • 网站建设 书平台推广广告宣传词
  • 怎么给自己公司做网站seo的优缺点
  • 太原谁想做网站长沙关键词优化新行情报价
  • 苏州网站设计公司排名百度官网app下载
  • 做p2p网站的主页模板成都关键词优化报价
  • 网页版梦幻西游官网seo营销的概念
  • 投资加盟项目google推广seo
  • 基于Java EE的电子商务网站建设wordpress建站