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

php婚庆网站源码总部在深圳的互联网公司

php婚庆网站源码,总部在深圳的互联网公司,北京网站开发报价,设计logo怎么设计为什么需要Mock数据 前端开发依赖后端接口时的阻塞问题 独立开发和测试的需求 快速迭代和原型验证的重要性 当前版本及框架 React18 Umi 4.0 Ant Design Ant Design Pro 其实这些都不重要,主要是有Umijs,因为Umijs具有开箱即用Mock功能的能力&#…

为什么需要Mock数据

前端开发依赖后端接口时的阻塞问题
独立开发和测试的需求
快速迭代和原型验证的重要性

当前版本及框架

React18
Umi 4.0
Ant Design + Ant Design Pro

其实这些都不重要,主要是有Umijs,因为Umijs具有开箱即用Mock功能的能力,可参考官网文档:UmiJS-Mock

实践

前提

如果你想使用Umi里面的mock,那么必须安装Umi框架,用npm或者pnpm就正常安装,此步骤不在赘述,以下直接实践

第一步 创建一个mock文件

在这里插入图片描述
不用纠结这个 文件是放在src下面,还是谁的下面,直接就这个项目里面,与src平级关系

第二步 在mock创建对应的ts文件,放置模拟数据和接口

mock/ip.ts

const MOCK_DATA = [{id: '1',used: 10,total: 14,region: '洛杉矶',coreRoute: 'US',exitNode: 'Uplink',remark: 'TikTok直播专用',},{id: '2',used: 13,total: 14,region: '洛杉矶',coreRoute: 'US',exitNode: 'Uplink',remark: 'TikTok直播专用',},{id: '3',used: 0,total: 14,region: '洛杉矶',coreRoute: 'US',exitNode: 'Uplink',remark: 'Amazon电商专用',}
];// 抽屉列表的专用数据源(按段 id 区分)
const IP_PERMISSION_DATA: Record<string, any[]> = {
……// 数组包裹数组
};export default {// 列表(保留)'POST /api/ip/list': (req: any, res: any) => {setTimeout(() => {res.send({ success: true, data: MOCK_DATA, total: MOCK_DATA.length });}, 120);},// 获取单条详情:根据 body.id 返回对应 record'POST /api/ip/detail': (req: any, res: any) => {const { id } = req.body || {};const item = MOCK_DATA.find((it) => String(it.id) === String(id));setTimeout(() => {res.send({ success: true, data: item || null });}, 80);},// 更新(简单模拟,body 包含 id 与其他字段)'POST /api/ip/update': (req: any, res: any) => {const payload = req.body || {};const idx = MOCK_DATA.findIndex((it) => String(it.id) === String(payload.id));if (idx >= 0) {MOCK_DATA[idx] = { ...MOCK_DATA[idx], ...payload };}setTimeout(() => {res.send({ success: true, message: '更新成功(mock)', data: MOCK_DATA[idx] || null });}, 120);},// 权限管理抽屉列表'POST /api/ip/children': (req: any, res: any) => {const { id, cidr } = req.body || {};let key = id ? String(id) : undefined;if (!key && cidr) {const found = MOCK_DATA.find((it) => String(it.cidr) === String(cidr));key = found?.id;}const data = (key && IP_PERMISSION_DATA[key]) || [];setTimeout(() => res.send({ success: true, data, total: data.length }), 100);},
};

第三步 调用mock数据和接口

放在某个调用接口的.tsx文件里面

  // 列表数据(来自 /mock/ip.ts)const [ipList, setIpList] = useState<any[]>([]);// 加载列表(调用 mock 的 GET /api/ip/list,后端到位时直接替换)const loadIpList = useCallback(async (opts?: { page?: number; pageSize?: number }) => {const page = opts?.page || currentPage;const size = opts?.pageSize || pageSize;const payload = {page,pageSize: size,keyword: keyWord || '',source: filterSource || '',coreRoute: filterCoreRoute || '',};try {const res = await fetch('/api/ip/list', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(payload),});// 期望后端/Mock 返回 JSON 格式 { success: true, data: [...], total: n }const ct = (res.headers.get('content-type') || '').toLowerCase();if (!ct.includes('application/json')) {console.warn('loadIpList non-json response');setIpList([]);setTotal(0);return;}const json = await res.json();if (json && json.success) {setIpList(json.data || []);setTotal(json.total || 0);} else if (json && Array.isArray(json.data)) {// 兜底兼容setIpList(json.data || []);setTotal(json.total || json.data.length || 0);} else {setIpList([]);setTotal(0);}} catch (err) {console.error('loadIpList error', err);setIpList([]);setTotal(0);}},[currentPage, pageSize, keyWord, filterSource, filterCoreRoute],);// 获取单条详情(调用 mock 的 POST /api/ip/detail)const getIpDetail = useCallback(async (id: string | number) => {try {const res = await fetch('/api/ip/detail', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ id }),});const json = await res.json();if (json && json.success) return json.data;return null;} catch (err) {console.error('getIpDetail error', err);return null;}}, []);// 更新 IP 段(调用 mock 的 POST /api/ip/update),成功后刷新列表const updateIp = useCallback(async (payload: any) => {try {const res = await fetch('/api/ip/update', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(payload),});const json = await res.json();if (json && json.success) {// 刷新当前页loadIpList({ page: currentPage, pageSize });return { ok: true, data: json.data };}return { ok: false, error: json };} catch (err) {console.error('updateIp error', err);return { ok: false, error: err };}},[loadIpList, currentPage, pageSize],);
// 比如这个列表接口调用
useEffect(() => {loadIpList();
}, [currentPage, pageSize, filterSource, filterRegion, keyWord]);

在这里插入图片描述

第四步 注意是否开启mock

以我此刻的项目为例,
npm run start
在这里插入图片描述

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

相关文章:

  • 普陀酒店网站建设学做静态网站
  • 网站设计风格确认书青海省城乡建设厅网站
  • 创意礼品做的比较好的网站周口城乡建设局网站
  • 道滘镇做网站中国室内设计公司100强
  • 郑州旅游网站搭建企信网查询官网
  • 优秀甜品网站苏州广告公司招聘
  • 做淘客网站需要营业执照吗番禺低价网站建设
  • 官方网站做背景墙厂家旅游网站模板html免费下载
  • 高校二级网站建设要求网站如何进行优化
  • WordPress设置模块间距邢台做网站优化价格
  • 企业网站产品优化怎么做wordpress插件会员
  • 个人网站建设法律规定对网站建设的具体想法
  • 红酒网站定位网站首页设计代码
  • 外贸网站整站程序大型游戏门户网站织梦模板
  • 做网站交互最好用的磁力搜索神器
  • 宁津建设局网站网站备案 子域名
  • 赤峰北京网站建设衡水做网站企业
  • 精选合肥网站建设山东网站建设app
  • 网站营销推广计划书商城型网站开发网站建设
  • 亿唐网不做网站做品牌考试题免费发外链的网站
  • 给公司做一个网站吗如何快速开发一个网站
  • 罗琳做的网站聊城市东昌府区建设局网站
  • 怎么往公司网站添加不同性质网站
  • 怎样在百度免费做网站好设计官网
  • 网站建设相关的书籍有多人做网站是个人备案
  • 个人网站毕业设计论文建设工程主管部门网站
  • 怎么给自己的品牌做网站高校学风建设网站
  • 免费的网站有哪些平台永久免费网站建设大概多少钱
  • 怎么做网站统计太原网站优化工具方法
  • 备案成功后怎么做网站腾讯云国外服务器