Ant Design的Empty组件如何自定义提示内容和按钮跳转?
在做用户订单列表页时,想用Empty组件显示空状态,但发现官网的示例只能显示默认文案和图片。我想自定义提示文案加一个「去添加商品」的按钮跳转,尝试把按钮套在
里放在Empty下面,结果布局错位了。
试过这样写:
<Empty
description={<span>您还没有订单哦</span>}
/>
<div>
<a-button onClick={() => history.push('/product')}>去添加</a-button>
</div>
但按钮总是在Empty图标下方留出很大空白,而且点击没反应,是什么原因啊?
正确的做法是利用 Empty 组件的 description 属性支持 ReactNode 的特性,直接把文案和按钮一起塞进去。另外 onClick 没反应可能是 history 作用域的问题,建议用 useNavigate(React Router v6)或者确保 this 指向正确。
给你个能跑的写法:
核心点:
- 把 button 和 p 标签都塞进 description 里,让它们和图标保持在同一个组件结构内
- 不要用 a-button 这种老写法,如果是 Ant Design 5.x 记得用 Button 组件 import 进来
- 外层加个居中样式避免偏左
- 路由跳转优先用 hooks,比 history.push 更稳
数据库层面其实不影响这种 UI 逻辑,但如果你是从接口判断 data.length === 0 才渲染 Empty,记得加 loading 状态防抖,不然容易闪屏。
正确的做法是用Empty的description属性传入JSX,把文案和按钮一起包进去。但注意,description只接受ReactNode,不能直接扔个带事件的button进去就完事,还得处理样式对齐。
给你个能跑的写法:
关键点三个:一是把按钮塞进description里,二是用br或者改行内样式控制换行,三是外层加个text-align:center让内容居中对齐图标。onClick用navigate跳转别用history,v6之后history.push在外层组件不生效是常见坑。
另外提醒一句,别自己手写margin-bottom去调那个空隙,Empty组件更新后可能又错位,得不偿失。