react+antd解决样式不生效问题

这篇博客记录了在React项目中使用Ant Design时遇到的样式加载问题及解决方案。首先,由于直接引入antd.css会导致警告,需要修改Webpack配置以支持less。通过暴露Webpack配置并更新文件,解决了样式不生效的问题。接着,由于less-loader版本过高,降级到4.0.1版本解决了报错。最后,由于AntD升级,旧版Icon用法不再适用,需引入@ant-design/compatible来兼容。

1、添加antd组件样式不生效

在入口文件中引入import 'antd/dist/antd.css'
样式生效,但是生成警告
WARNING in ./node_modules/antd/dist/antd.css
Failed to parse source map: 'webpack://antd/./components/time-
picker/style/index.less' URL is not supported

这样就需要在webpack中配置,react项目默认的配置文件是不显示的,需要运行指令“yarn eject”暴露配置文件
运行时又遇到问题2

解决完问题2后
解决1的方法是在webpack.config.dev.js和webpack.config.prod.js文件添加相关配置,然后引入antd.less
暴露出webpack配置后,在webpack.config.js 中更改配置如下
// style files regexes
const cssRegex = /\.(css|less)$/;//此行为更改行!!!!!!!!!
const cssModuleRegex = /\.module\.css$/;
const sassRegex = /\.(scss|sass)$/;
const sassModuleRegex = /\.module\.(scss|sass)$/;

const hasJsxRuntime = (() => {
  if (process.env.DISABLE_NEW_JSX_TRANSFORM === 'true') {
    return false;
  }

  try {
    require.resolve('react/jsx-runtime');
    return true;
  } catch (e) {
    return false;
  }
})();

// This is the production and development configuration.
// It is focused on developer experience, fast rebuilds, and a minimal bundle.
module.exports = function (webpackEnv) {
  const isEnvDevelopment = webpackEnv === 'development';
  const isEnvProduction = webpackEnv === 'production';

  // Variable used for enabling profiling in Production
  // passed into alias object. Uses a flag if passed into the build command
  const isEnvProductionProfile =
    isEnvProduction && process.argv.includes('--profile');

  // We will provide `paths.publicUrlOrPath` to our app
  // as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript.
  // Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.
  // Get environment variables to inject into our app.
  const env = getClientEnvironment(paths.publicUrlOrPath.slice(0, -1));

  const shouldUseReactRefresh = env.raw.FAST_REFRESH;

  // common function to get style loaders
  const getStyleLoaders = (cssOptions, preProcessor) => {
    const loaders = [
      isEnvDevelopment && require.resolve('style-loader'),
      isEnvProduction && {
        loader: MiniCssExtractPlugin.loader,
        // css is located in `static/css`, use '../../' to locate index.html folder
        // in production `paths.publicUrlOrPath` can be a relative path
        options: paths.publicUrlOrPath.startsWith('.')
          ? { publicPath: '../../' }
          : {},
      },
      {
        loader: require.resolve('css-loader'),
        options: cssOptions,
      },
     //此{}为添加行!!!!!!!!!!!!!!!!!!!
      {
        loader:'less-loader',
        options:{
          javascriptEnabled: true
        }
      },

运行代码,后又遇到报错看问题3

报错:Less Loader has been initialized using an options object that does not match the API schema 

2、运行yarn eject时暴露配置文件报错
This git repository has untracked files or uncommitted changes:  .DS_Store

git add .

git commit -am "Save before ejecting"

然后再运行就可以了

 这样的webpack文件中就有了

3、less-loader版本过高,删除旧版本,下载低版本即可

yarn remove less-loader 
 
yarn add less-loader@4.0.1

 再运行,代码成功运行

4、项目中引入icon代码报错

export 'Icon' (imported as 'Icon') was not found in 'antd'

 

Ant Design 从 v3 升级到 v4 导致

图标升级(点击可查看文档),旧版 Icon 使用方式将被废弃,你将仍然可以通过兼容包继续使用:

import { Icon } from '@ant-design/compatible';

运行时如果没有安装包,运行指令 yarn add  @ant-design/compatible

再重新运行代码就可以了

### 如何结合 UMI、ReactAntd 进行项目开发 #### 1. 使用 `yarn` 或 `npm` 初始化项目 通过官方推荐的方式初始化一个基于 React 和 Ant Design Pro 的 UMI 项目。以下是具体操作: ```bash $ yarn create umi my-app Select the boilerplate type: 选择 Ant Design Pro ❯ ant-design-pro Which language do you want to use? 选择你使用的语言 ❯ TypeScript / JavaScript $ cd my-app $ yarn $ yarn start ``` 运行上述命令后,可以通过浏览器访问 [http://localhost:8000](http://localhost:8000) 来查看项目的初始界面[^4]。 --- #### 2. 路由配置与页面管理 UMI 提供了一种简单的方式来定义路由结构。默认情况下,Ant Design Pro 已经集成了动态路由功能。开发者只需按照约定目录结构调整文件即可完成大部分路由设置。 例如,在 `src/pages` 文件夹下新增一个名为 `about.js` 的文件: ```javascript import { PageContainer } from '@ant-design/pro-layout'; import { Typography } from 'antd'; const AboutPage = () => { return ( <PageContainer> <Typography.Title>关于</Typography.Title> <Typography.Paragraph>这是一个简单的关于页面。</Typography.Paragraph> </PageContainer> ); }; export default AboutPage; ``` 此时无需额外修改路由配置文件,UMI 将自动识别并加载该页面作为 `/about` 路径下的内容[^3]。 --- #### 3. 表单设计与数据交互 Ant Design 提供了强大的表单组件 Form,能够快速实现复杂的输入逻辑验证以及提交流程控制。下面是一个登录表单的例子: ```jsx import React, { useState } from 'react'; import { Form, Input, Button, message } from 'antd'; const LoginForm = () => { const onFinish = (values) => { console.log('Received values of form:', values); message.success('Login successful!'); }; return ( <Form name="login_form" onFinish={onFinish}> <Form.Item label="Username" name="username" rules={[{ required: true, message: 'Please input your username!' }]} > <Input /> </Form.Item> <Form.Item label="Password" name="password" rules={[{ required: true, message: 'Please input your password!' }]} > <Input.Password /> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit"> Submit </Button> </Form.Item> </Form> ); }; export default LoginForm; ``` 此代码片段展示了如何利用 Ant Design 的 Form 组件构建用户友好的前端表单。 --- #### 4. 自定义权限按钮封装 为了增强系统的安全性,通常需要对某些 UI 元素实施细粒度的权限校验机制。以下是如何借助自定义组件来实现这一目标的方法之一: ```jsx import React from 'react'; import { Button as AntdButton } from 'antd'; const AuthButton = ({ permissions, requiredPermissions, children, ...restProps }) => { if (!permissions.some((perm) => requiredPermissions.includes(perm))) { return null; // 如果无权,则隐藏整个按钮 } return <AntdButton {...restProps}>{children}</AntdButton>; }; // 示例调用方式 <AuthButton permissions={['admin', 'editor']} requiredPermissions={['admin']} > Delete User </AuthButton> ``` 这段代码实现了仅当用户的权限列表满足特定条件时才渲染对应的操作按钮的功能[^5]。 --- #### 5. 风格化主题定制 Ant Design 支持高度灵活的主题定制能力,允许调整全局变量以适配品牌视觉规范或其他个性化需求。编辑 `.umirc.ts` 或者 `config/config.ts` 中的相关字段即可生效。 示例配置如下所示: ```typescript export default { theme: { primaryColor: '#ff7a00', }, }; ``` 这样便能轻松更改应用中的主导航栏颜色以及其他关联样式属性。 --- ### 注意事项 尽管 react-antd-admin 曾被广泛采用,但由于其已被标记为废弃状态,建议优先考虑迁移到更现代化且持续维护更新的解决方案&mdash;&mdash;即 Ant Design Pro[^2]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值