解决@ant-design/icons导致的样式异常

在使用antd+tailwind时 通常会使用layer模式

js 复制代码
    <StyleProvider layer>
      <ConfigProvider locale={zhCN}>
        <App className='w-full h-full relative m-0 p-0'>
          {useRoutes(router)}
        </App>
      </ConfigProvider>
    </StyleProvider>
css 复制代码
@layer theme, base, antd, components, utilities;
@import 'tailwindcss';

此时layer的顺序会非常重要 决定了样式的覆盖情况

但是某些情况下 icons会造成layer顺序异常

原因在于 一开始 icon组件没有接收到StyleProvider注入的layer 它会在<head>顶部插入样式

html 复制代码
<style data-rc-order="prepend" rc-util-key="@ant-design-icons">
.anticon{
xxx

一般情况下 如果有icon接受到layer 会注入@layer antd开头的样式 并插入<head>末尾 ;但是在已经存在head>style[rc-util-key="@ant-design-icons"]的情况下 会复用这个节点 只修改其内容

因此 这个style会被改为

html 复制代码
<style data-rc-order="prepend" rc-util-key="@ant-design-icons">
@layer antd {xxx

它是<head>的第一个元素 让@layer antd的定义比其他layer更早 使其优先级降低

解决方法

  • 使用@ant-design/icons^5 使其与antd版本匹配 参考文档
  • 不要 从antd导入message等函数式组件 而是使用App.useApp
  • 如果你的项目和我一样 在axios的拦截器里用了message 也没关系 可以这样做
js 复制代码
    <StyleProvider layer>
      <ConfigProvider locale={zhCN}>
        <App className='w-full h-full relative m-0 p-0'>
          {useRoutes(router)}
          <RightOutlined className='hidden' />
        </App>
      </ConfigProvider>
    </StyleProvider>

提前把可能引发错误的style节点固定在head末尾

相关推荐
青青家的小灰灰3 小时前
React 反模式(Anti-Patterns)排查手册:从性能杀手到逻辑陷阱
前端·javascript·react.js
青青家的小灰灰3 小时前
告别 Prop Drilling:Context API 的陷阱、Reducer 模式与原子化状态库原理
前端·javascript·react.js
ssshooter17 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
青青家的小灰灰1 天前
迈向全栈新时代:SSR/SSG 原理、Next.js 架构与 React Server Components (RSC) 实战
前端·javascript·react.js
青青家的小灰灰1 天前
透视 React 内核:Diff 算法、合成事件与并发特性的深度解析
前端·javascript·react.js
小霖家的混江龙1 天前
从 0 到 1 实现一个 useState
前端·javascript·react.js
晓得迷路了1 天前
栗子前端技术周刊第 118 期 - Oxfmt Beta、Angular GitHub stars、React 基金会...
前端·javascript·react.js
AAA阿giao2 天前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
昨晚我输给了一辆AE862 天前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript
不会敲代码12 天前
深入浅出 React 闭包陷阱:从现象到原理
前端·react.js