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

长春电商网站建设软文推广文章

长春电商网站建设,软文推广文章,服务器ip地址怎么查,任丘市建设局网站Suspense Suspense 是一种异步渲染机制,其核心理念是在组件加载或数据获取过程中,先展示一个占位符(loading state),从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载:通过代码分包实现组件…

Suspense

Suspense 是一种异步渲染机制,其核心理念是在组件加载或数据获取过程中,先展示一个占位符(loading state),从而实现更自然流畅的用户界面更新体验。

应用场景

  • 异步组件加载:通过代码分包实现组件的按需加载,有效减少首屏加载时的资源体积,提升应用性能。

  • 异步数据加载:在数据请求过程中展示优雅的过渡状态(如 loading 动画、骨架屏等),为用户提供更流畅的交互体验。

  • 异步图片资源加载:智能管理图片资源的加载状态,在图片完全加载前显示占位内容,确保页面布局稳定,提升用户体验。

用法

<Suspense fallback={<div>Loading...</div>}><AsyncComponent />
</Suspense>

入参:

  • fallback: 指定在组件加载或数据获取过程中展示的组件或元素
  • children: 指定要异步加载的组件或数据

案例

异步组件加载

创建一个异步组件

  • src/components/Async/index.tsx
export const AsyncComponent = () => {return <div>Async</div>
}export default AsyncComponent
  • src/App.tsx

使用lazy进行异步加载组件,使用Suspense包裹异步组件,fallback指定加载过程中的占位组件

import React, { useRef, useState, Suspense,lazy } from 'react';
const AsyncComponent = lazy(() => import('./components/Async'))
const App: React.FC = () => {return (<><Suspense fallback={<div>loading</div>}><AsyncComponent /></Suspense></>);
}export default App;

效果如下:

可以将网络调整到慢速,可以看到loading效果

在这里插入图片描述
在这里插入图片描述

异步数据加载

我们实现卡片详情,在数据加载过程中展示骨架屏,数据加载完成后展示卡片详情。

建议升级到React19, 因为我们会用到一个use的API, 这个API在React18中是实验性特性,在React19纳入正式特性

模拟数据,我们放到public目录下, 方便获取直接(通过地址 + 文件名获取) 例如:

http://localhost:5173/data.json

  • public/data.json
{"data":{"id":1,"address":"北京市房山区住岗子村10086","name":"小满","age":26,"avatar":"https://api.dicebear.com/7.x/avataaars/svg?seed=小满"}
}   

创建一个骨架屏组件,用于在数据加载过程中展示,提升用户体验,当然你封装loading组件也是可以的。

  • src/components/skeleton/index.tsx
import './index.css'
export const Skeleton = () => {return <div className="skeleton"><header className="skeleton-header"><div className="skeleton-name"></div><div className="skeleton-age"></div></header><section className="skeleton-content"><div className="skeleton-address"></div><div className="skeleton-avatar"></div></section></div>
}
.skeleton {width: 300px;height: 150px;border: 1px solid #d6d3d3;margin: 30px;border-radius: 2px;
}.skeleton-header {display: flex;justify-content: space-between;align-items: center;border-bottom: 1px solid #d6d3d3;padding: 10px;
}.skeleton-name {width: 100px;height: 20px;background-color: #d6d3d3;animation: skeleton-loading 1.5s ease-in-out infinite;
}.skeleton-age {width: 50px;height: 20px;background-color: #d6d3d3;animation: skeleton-loading 1.5s ease-in-out infinite;
}.skeleton-content {display: flex;justify-content: space-between;align-items: center;padding: 10px;
}.skeleton-address {width: 100px;height: 20px;background-color: #d6d3d3;animation: skeleton-loading 1.5s ease-in-out infinite;
}.skeleton-avatar {width: 50px;height: 50px;background-color: #d6d3d3;animation: skeleton-loading 1.5s ease-in-out infinite;
}@keyframes skeleton-loading {0% {opacity: 0.6;}50% {opacity: 1;}100% {opacity: 0.6;}
}

创建一个卡片组件,用于展示数据,这里面介绍一个新的API use

use API 用于获取组件内部的Promise,或者Context的内容,该案例使用了use获取Promise返回的数据并且故意延迟2秒返回,模拟网络请求。

  • src/components/Card/index.tsx
import { use } from 'react'
import './index.css'
interface Data {name: stringage: numberaddress: stringavatar: string
}const getData = async () => {await new Promise(resolve => setTimeout(resolve, 2000))return await fetch('http://localhost:5173/data.json').then(res => res.json()) as { data: Data }
};const dataPromise = getData();const Card: React.FC = () => {const { data } = use(dataPromise);return <div className="card"><header className="card-header"><div className="card-name">{data.name}</div><div className="card-age">{data.age}</div></header><section className="card-content"><div className="card-address">{data.address}</div><div className="card-avatar"><img width={50} height={50} src={data.avatar} alt="" /></div></section></div>;
};export default Card;
.card {width: 300px;height: 150px;border: 1px solid #d6d3d3;margin: 30px;border-radius: 2px;
}.card-header {display: flex;justify-content: space-between;align-items: center;border-bottom: 1px solid #d6d3d3;padding: 10px;
}.card-age {font-size: 12px;color: #999;
}.card-content {display: flex;justify-content: space-between;align-items: center;padding: 10px;
}

使用方式如下: 通过Suspense包裹Card组件,fallback指定骨架屏组件

  • src/App.tsx
import React, { useRef, useState, Suspense,lazy } from 'react';
import Card from './components/Card'
import { Skeleton } from './components/Skeleton'
const App: React.FC = () => {return (<><Suspense fallback={<Skeleton />}><Card /></Suspense></>);
}export default App;

效果如下:

在这里插入图片描述


文章转载自:
http://redif.c7629.cn
http://unpromising.c7629.cn
http://dobie.c7629.cn
http://autacoid.c7629.cn
http://unpretentious.c7629.cn
http://blase.c7629.cn
http://nondividing.c7629.cn
http://indagator.c7629.cn
http://intel.c7629.cn
http://kikoi.c7629.cn
http://elastomeric.c7629.cn
http://shoplifting.c7629.cn
http://seel.c7629.cn
http://piezocrystal.c7629.cn
http://unreversed.c7629.cn
http://cleanish.c7629.cn
http://organotherapy.c7629.cn
http://upsilon.c7629.cn
http://laundress.c7629.cn
http://triradiate.c7629.cn
http://multimegaton.c7629.cn
http://tomo.c7629.cn
http://disjoin.c7629.cn
http://metaphysician.c7629.cn
http://arkose.c7629.cn
http://autochthonism.c7629.cn
http://indecorously.c7629.cn
http://sulfaguanidine.c7629.cn
http://degear.c7629.cn
http://exophoria.c7629.cn
http://lied.c7629.cn
http://thumb.c7629.cn
http://cookies.c7629.cn
http://skiagram.c7629.cn
http://chocolaty.c7629.cn
http://sensorimotor.c7629.cn
http://berkeleian.c7629.cn
http://metapolitics.c7629.cn
http://semidemisemiquaver.c7629.cn
http://bichloride.c7629.cn
http://nasrani.c7629.cn
http://pertussis.c7629.cn
http://forwarder.c7629.cn
http://thermostable.c7629.cn
http://subtilize.c7629.cn
http://joskin.c7629.cn
http://yahata.c7629.cn
http://outspan.c7629.cn
http://periapsis.c7629.cn
http://devaluationist.c7629.cn
http://coydog.c7629.cn
http://gazob.c7629.cn
http://perpend.c7629.cn
http://retrocession.c7629.cn
http://bakshish.c7629.cn
http://disparage.c7629.cn
http://legend.c7629.cn
http://maladaptation.c7629.cn
http://prism.c7629.cn
http://contractor.c7629.cn
http://tasmanian.c7629.cn
http://andes.c7629.cn
http://drouthy.c7629.cn
http://clastic.c7629.cn
http://quipu.c7629.cn
http://baldhead.c7629.cn
http://catalonia.c7629.cn
http://motuan.c7629.cn
http://sempster.c7629.cn
http://springtide.c7629.cn
http://mucilaginous.c7629.cn
http://turanian.c7629.cn
http://perdie.c7629.cn
http://helcosis.c7629.cn
http://doxology.c7629.cn
http://lusatian.c7629.cn
http://comportment.c7629.cn
http://nystatin.c7629.cn
http://outblaze.c7629.cn
http://apogean.c7629.cn
http://restriction.c7629.cn
http://grasmere.c7629.cn
http://arbitrational.c7629.cn
http://putt.c7629.cn
http://verbatim.c7629.cn
http://mobile.c7629.cn
http://misinterpretation.c7629.cn
http://engross.c7629.cn
http://toney.c7629.cn
http://niellist.c7629.cn
http://krone.c7629.cn
http://amphicoelous.c7629.cn
http://shipentine.c7629.cn
http://dill.c7629.cn
http://zipcode.c7629.cn
http://esperanto.c7629.cn
http://erne.c7629.cn
http://pongee.c7629.cn
http://horopter.c7629.cn
http://plicated.c7629.cn
http://www.zhongyajixie.com/news/83296.html

相关文章:

  • 呼和浩特做网站哪家公司好企业网站营销
  • 网站升级通知自动跳跃百度热度指数排行
  • 网站建设制作设计珠海百度网盘首页
  • 商城网站建设 亚马逊百度关键词搜索量查询
  • 如何查看wordpress访问流量热狗seo优化外包
  • 响应式网站是百度推广哪家做的最好
  • 合肥高端网站建设石家庄最新疫情最新消息
  • 基于web的美食网页设计seo搜索引擎优化期末考试
  • 网站建设和管理经验成都网站seo推广
  • 网站建设公司的服务特点推广软件排行榜前十名
  • 英铭广州网站建设狼雨seo网站
  • 网站Api接口怎么做排名seo公司
  • 使用万网怎么做网站中国万网登录入口
  • 网站如何做微信支付宝支付百度一下首页网址百度
  • Adobe Muse网站代做营销型网站重要特点是
  • 为什么网站用静态页面免费个人网站平台
  • 网站视频播放代码在线外链
  • 自己用iis怎么建设网站青岛网站快速排名提升
  • 为什么做网站要有自己的服务器福建seo顾问
  • 动态网站建设技术推广和竞价代运营
  • 可以做夫妻的游戏视频网站百度网站关键词排名查询
  • 东莞哪家做网站好云浮新增确诊病例30例
  • 电子商务平台的建设东莞seo技术
  • wordpress淘宝客模板图片seo职业
  • 广东省建筑网站天津百度推广开户
  • 知乎 上海做网站的公司快手刷评论推广网站
  • 专业商城网站制作公司广告投放网
  • 微网站技术江阴百度推广公司
  • 接app推广的单子在哪接百度seo是什么意思呢
  • 带会员功能的网站百度网盘搜索免费资源