Ant Design Pro 组件踩坑记录

ProFormUploadButton 踩坑记录

最近在用ant design pro 组件做项目,在使用到ProFormUploadButton这个组件的时候,发现很多文档上没有写的东西,接下来把我的踩坑记录分享给大家.

刚开始只有一个上传的需求,我就把官网的示例直接copy了下来,如下:
<ProFormUploadButton label="upload" name="upload" action="upload.do" /> 
后面跟我说要一个预览的功能,这样其我就参考ant design 的组件加成这样:
<ProFormUploadButtonname="businessLicense"label="营业执照"max={1}action="upload.do"fieldProps={
  
  {multiple: false,name: 'file',listType: 'picture-card',accept:"image/png, image/jpeg",headers: {'timestamp': (new Date().valueOf()) + ''},onChange: (e) => {handleChange(e)},}}fileList={fileList}extra="只能上传jpg/png文件,且不大于3MB"/> 
测试后,发现没有前置校验,于是加了前置校验,如下:
// 上传前置校验
const beforeUpload = (file: RcFile) => {const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';if (!isJpgOrPng) {message.error('只允许上传 JPG/PNG 格式的文件');}const isLt3M = file.size / 1024 / 1024 < 3;if (!isLt3M) {message.error('仅支持3M以下的文件');}return isJpgOrPng && isLt3M}; 
测试后,发现就算校验了,会自动跳过,还是会调接口,所以改成这样
// 上传前置校验
const beforeUpload = (file: RcFile) => {const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';if (!isJpgOrPng) {message.error('只允许上传 JPG/PNG 格式的文件');}const isLt3M = file.size / 1024 / 1024 < 3;if (!isLt3M) {message.error('仅支持3M以下的文件');}// 如果返回了if ((isJpgOrPng && isLt3M) === false) {// 在这里记得要清空fileList// 返回这个参数beforeUpload为false就可以拦截住了return Upload.LIST_IGNORE} else {return true}}; 

注意:除了fileList以外, 其他所有的属性都要放到ProFormUploadButton组件的fieldProps里面,这样才能生效.

注意二: 在onchange方法里如果上传文件状态为error,还是会显示到fileList,这时候要处理一下:

if (info.file.status == 'error') {message.error('上传失败!请稍后再试')setFileList([])} 
我以为到这里就结束了,没想到,又加了需求,说是要让图片可以旋转,放大缩小,我网上找了个js库,用的人比较多,鉴于我是react, 所以又找了个用react封装的插件,下面贴一下两个库的git地址.

react版本 tinymins/viewerjs-react: React wrapper for viewerjs. (github.com)

<think>好的,用户想了解在React项目中使用postcss-pxtorem时遇到的问题及解决方案。我需要结合提供的引用内容来整理答案。首先,引用3提到了React中使用postcss-pxtorem的基本配置步骤,比如安装、webpack配置和参数设置。引用2和引用4提到了一些常见问题,比如lib-flexible在iPad上的兼容性问题,以及行内样式无法转换的问题。另外,引用1指出vue版本升级导致的问题,虽然用户问的是React,但可能需要注意类似版本兼容性问题。 首先,应该列举常见问题。根据引用2,lib-flexible在iPad上的兼容性问题,解决方法可能是改用vw/vh方案。然后,引用4提到行内样式的px不会被转换,需要手动处理。引用3中的配置参数如rootValue设置不正确可能导致计算错误,这也是一个常见问题。还有,postcss-pxtorem在React中的配置可能需要检查Webpack或Vite的配置是否正确,特别是在React 18或更新版本中是否存在兼容性问题,类似于引用1中的Vue版本问题。 解决方案部分,针对每个问题给出解决方法。例如,iPad兼容性问题可以改用viewport方案,行内样式需要开发者自己转换,配置参数需要根据设计稿调整rootValue,版本升级导致的插件问题可能需要降级或寻找替代插件。此外,可能还要提到排除第三方库的情况,如引用3中的exclude配置,避免转换UI框架的样式。 需要确保回答结构清晰,分点列出问题和对应的解决措施,并引用对应的参考文献。同时注意使用中文,正确应用LaTeX格式,但根据用户的问题内容,可能数学公式较少,所以重点在代码块和引用标注。最后生成相关问题,比如如何配置rootValue,如何处理第三方库样式等。</think>### React项目中postcss-pxtorem常见问题与解决方案 #### 1. **iPad设备兼容性问题** - **问题描述**:使用`lib-flexible`实现弹性布局时,可能出现iPad或iPad Pro显示异常(如内容缩放比例错误)[^2]。 - **解决方案**: 1. 改用`viewport`单位(vw/vh)替代`rem`方案; 2. 结合`postcss-px-to-viewport`插件直接转换px为视口单位[^4]。 #### 2. **行内样式无法转换** - **问题描述**:`postcss-pxtorem`只能转换CSS文件中的`px`,无法处理行内样式(如JSX中的`style={{ width: "10px" }}`)[^4]。 - **解决方案**: 1. 手动将行内样式的`px`转换为`rem`; 2. 使用CSS Modules或外部样式表替代行内样式。 #### 3. **rootValue配置错误** - **问题描述**:若`rootValue`值与设计稿基准值不匹配(如设计稿为750px宽度,但`rootValue`设为固定值19.2),会导致`rem`计算错误[^3]。 - **解决方案**: 1. 动态计算`rootValue`,例如: ```javascript rootValue: (module) => (module.file.includes("vant") ? 37.5 : 75) // 区分UI库和业务代码 ``` 2. 根据设计稿宽度按比例设置,如设计稿750px时,`rootValue = 75`(即1rem = 75px)。 #### 4. **第三方UI框架样式失效** - **问题描述**:若未排除`node_modules`中的UI库(如Ant Design、Vant),可能导致组件样式异常。 - **解决方案**: 在配置中添加`exclude`正则表达式: ```javascript exclude: /(node_module)/ // 排除第三方库目录 ``` #### 5. **版本兼容性问题** - **问题描述**:React 18+或工具链升级后,可能因插件版本不兼容导致报错(如`node.getIterator is not a function`)[^2]。 - **解决方案**: 1. 降级`postcss-pxtorem`至兼容版本; 2. 使用`postcss-px2rem`或`postcss-px-to-viewport`替代。 --- ### 配置示例(Webpack) ```javascript // webpack.config.js { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ require('postcss-pxtorem')({ rootValue: 75, propList: ['*'], exclude: /node_modules/, minPixelValue: 2 }) ] } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值