You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js服务端渲染项目中使用Ant Design?

解决Next.js中Ant Design无法服务端渲染的问题

核心原因

Ant Design的所有组件本质都是客户端组件,依赖React的客户端API(比如状态管理、DOM操作),而Next.js的服务端组件(Server Components)禁止使用这类客户端特性——哪怕是<Row>、<Col>这类基础布局组件也不例外,直接在服务端组件里引入就会触发限制。

解决方案

1. 给使用Ant Design的文件加客户端标记

在用到Ant Design组件的文件顶部添加'use client'指令,明确告诉Next.js这个文件属于客户端组件,就能正常使用所有Ant Design组件:

'use client';

import { Row, Col, Button } from 'antd';

export default function MyPage() {
  return (
    <Row gutter={16}>
      <Col span={12}>
        <Button type="primary">测试按钮</Button>
      </Col>
    </Row>
  );
}

2. 拆分服务端逻辑与客户端UI

如果页面需要服务端数据获取,建议把数据请求等服务端逻辑放在单独的服务端组件里,再把数据传递给包含Ant Design组件的客户端组件:

// 服务端组件:仅负责获取数据
export default async function Page() {
  const listData = await fetchServerData();
  return <AntdTable data={listData} />;
}

// 客户端组件:仅负责渲染Ant Design UI
'use client';

import { Table } from 'antd';

export function AntdTable({ data }) {
  const columns = [
    { title: '名称', dataIndex: 'name' },
    { title: '数量', dataIndex: 'count' }
  ];
  return <Table dataSource={data} columns={columns} />;
}

3. 绝对不要在服务端组件里直接导入Ant Design

不管是组件本身还是类型定义,只要涉及Ant Design的代码,都必须放在带有'use client'标记的文件里,避免服务端组件触发客户端API限制。

补充说明

目前Ant Design官方还未针对Next.js服务端组件做完全适配,所有组件都需要在客户端环境运行。这种方式并非“无法服务端渲染”,而是让Ant Design的UI渲染在客户端正常执行,页面的服务端逻辑(比如数据获取)依然可以正常运行,不影响整体的服务端渲染流程。

内容的提问来源于stack exchange,提问作者Oleg Ivsv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:05