AntDesign使用遇到问题整理

本文针对小白用户,都是最基本的使用问题,多看仔细看ant文档便可解决,此处仅做整理。牛人绕道即可。
1, Form表单
1)使用getFieldDecorator进行组件内容onchange监听,rules判断,如果报错’Cannot read property ‘getFieldDecorator’ of undefined’需要对组件进行Myform = Form.create({})(Myform);
2)点击提交按钮,如果没有执行handleSubmit,原因是按钮需要包含在form表单内并且设置htmlType={“submit”}。点击提交未报错设置的rules未进行判断是因为在handleSubmit内要设置form.validateFields进行域名校验。
3)对Form进行二次封装,因为每次都需要getFieldDecorator毕竟麻烦。在自己封装的BestForm内设置
```js
this.props.children.map(child=>{
const { label, initialValue, rules } = child.props;
return (
<FormItem label={label} {…formItemLayout}>
{getFieldDecorator(child.key, {
initialValue: initialValue,
rules: rules
})(child)}

);

	 报错‘Cannot use 'in' operator to search for 'value' in undefined’
	 改为:
	 ```js
	  const formItems = React.Children.map(children, child => {
      if (!child) return false;
      const { label, initialValue, rules } = child.props;
      return (
        <FormItem label={label} {...formItemLayout}>
          {getFieldDecorator(child.key, {
            initialValue: initialValue,
            rules: rules
          })(React.cloneElement(child))}
        </FormItem>
      );
    });
    ```
    4)form内组件希望和redux数据共通。redux数据更新,组件获取到最近state数据但是不会渲染最新state值。因为getFieldDecorator的initialValue相当于input 的placeholder,不会根据最新数据改变内容。
    
 - 直接设置组件value?form内组件的value是不生效的。
 - 在componentWillReceiveProps里调用setFieldsValue?No,antd的setFieldValue不能放在那里,会死循环。。大写的尴尬。
 -  此时mapPropsToFields就登场啦,噔噔噔噔~所以记住,还是好好看文档吧/囧/囧/囧,如何使用,在Form.create中使用,

Myform = Form.create({
mapPropsToFields(props) {
return {
name: {value: props.stationSel[0].value}
};
}
})(Myform);

<Form onSubmit={this.handleSubmit}> <FormItem {...formItemLayout} label="新岗位名"> {getFieldDecorator("name", { rules: [ { message: "岗位名称不能为空" }] })(<Input placeholder=“请输入岗位名” disabled={!operate} />)}

2, table表格
     1)不显示,报错“Objects are not valid as a React child (found: object with keys {id, updatedTime}, If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of `t`.”原因是columns数组元素中未包含dataIndex,识别不了。
     2)table嵌套,父table和子table都需异步获取数据。点击展开子table,开始在expandedRowRender方法中发送请求,请求回调中渲染子table。但是子table不展示,点击没反应。后来在onExpand方法中发送请求获取数据,expandedRowRender方法只用于渲染子table
3,treeSelect数据展示问题,数据一定要有label作为展示字段。
4,Upload文件上传问题,因为思路不够清晰导致搞了一整天,先理下思路。前端传递文件->express获取请求->superAgent做请求转发到后台服务器->数据返回。
但是问题来了,服务器端并未收到任何数据。提示只接收 multipart/form-data格式数据导致思路走偏,一直围绕  request.set('Content-Type', 'multipart/form-data')作文章做了好久。。后来发现superAgent自动识别文件格式自动设置,无需设置,而且自己设置contentType会因确实boundary而报错。后来想当然觉得,一定是superAgent发送给服务器数据不正确,围绕superAgent一顿google,万般找不到头绪,
1)填坑1:前端上传文件ajax必须将文件转为formData()格式才可上传。formData格式不同于对象,let formData = new FormData(); formData.append("file", file);append后输出formData仍为空,是正常的。formData.get('file')是有数据的。
2)填坑2:文件上传经过express转换之后,输出request相关信息会发现req.body,req.params,req.query均为空!这是问题的关键,而不是因为superAgent。express传递给superAgent数据已经出错,所以服务器无法获取数据。为何为空,因为body-parser 不接收multipart/form-data格式的数据。也考虑过绕过body-parse但是没有它formdata数据也未接收到,选择第三方中间件解决。需要引用const formidable = require("express-formidable");app.use(formidable());可以解决。(最初也引用过其他中间件,输出文件格式不正确不可用,google确实比某度好用些)
3)填坑3:输出req.files即为文件,其他参数在req.fields中,superAgent提供高级别API.attach(name, [path], [filename])和.field(name, value)可供传递文件。将file传递即可。


上传相关代码:页面.js:
Upload = file => {
   let formData = new FormData();
   formData.append("file", file);
   $.ajax({
     type: "POST",
     url: "/ajax/file/import/",
     data: formData,
     contentType: false,
     dataType: "json",
     processData: false,
     success: callback
   });
 };

node_server.js
const express = require("express");
const formidable = require("express-formidable");
const formidableMiddleWare = formidable();

app.post("/ajax/file/*", formidableMiddleWare, function(req, res) {
 console.log(req);
 console.log("******************");
 console.log(req.files);
 let reqJsonData = req.body;
 superagent
   .post("http://10.45.25.70:8081" + req.url)
   .set("Cookie", "sid=" + req.cookies.sid)
   .attach("file", req.files.file)
   // .send(req.fields)
   .end(function(err, rest) {
     console.log(rest);
     // res.send(JSON.parse(rest.text));
   });
});

5,form 动态修改字段(instCode,taxCode)是否必填时,需要手动校验一次
this.setState(
{
required: e.target.value == null || e.target.value == “”
},
() => {
this.baseInfo.validateFields([“instCode”, “taxCode”], {
force: true
});
}
);
6,table宽度设置,如果每一列都设置width,则等于没设置,按照百分比分配,至少有一个不设置宽度,其他才按照px排布。
两个字 30px,7个数字占50px
7,anchor
anchor 组件,如果不想依据body滚动,则提供滚动区域元素getContainer属性

  <Anchor
            getContainer={() => document.getElementById('scrollContent')}
            onClick={this.handleClick}
            targetOffset={40}
          >balalalal</Anchor>
         ```
         要保证    scrollContent(父容器)overflow:auto且高度固定。
          而anchor包含内容元素不要设置overflow:auto,高度自动撑开(控制台查看高度应该比父容器高才对)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Ant Design 是一个优秀的 React 组件库,它提供了丰富的组件和专业的设计规范,可以帮助开发者快速构建优美的用户界面。 Ant Design 的兼容性一般较好,支持最新版本的 Chrome、Firefox、Safari、Edge 和 Internet Explorer 11 等浏览器。 如果你在使用 Ant Design 遇到兼容性问题,可以尝试使用 polyfill 库来解决。polyfill 库可以帮助你在低版本浏览器中模拟新的 JavaScript 功能,从而让你的应用能够在更多浏览器中正常运行。 此外,Ant Design 还提供了一个专门用于解决兼容性问题的组件:`<BackwardCompatible />`。使用这个组件,你可以在旧版浏览器中渲染不同的内容,从而避免出现问题。 总的来说,Ant Design 的兼容性较好,但是如果遇到问题,可以尝试使用 polyfill 库或 `<BackwardCompatible />` 组件来解决。 ### 回答2: Ant Design是一个基于React的UI库,它的目标是提供一套美观、易用且高质量的UI组件,以帮助开发者快速构建现代化的Web应用程序。在兼容性方面,Ant Design具有良好的兼容性,支持多种主流的浏览器和设备。 首先,Ant Design兼容大部分现代浏览器,包括但不限于Chrome、Firefox、Safari和Edge。它遵循Web标准,利用CSS3和HTML5等最新的前端技术来构建组件,因此可以在这些浏览器上正常运行和展示,确保用户在任何环境下都能良好地使用Ant Design提供的功能。 其次,Ant Design还提供了响应式布局的支持,可以适应不同尺寸的屏幕和设备。无论是在桌面、平板还是移动设备上,Ant Design的组件都能自动适配并呈现出最佳的布局效果。这样,开发者可以根据自己的需要选择合适的设备,而不用担心Ant Design会出现兼容性问题。 此外,Ant Design还提供了针对不同平台和设备的主题定制功能。开发者可以根据自己的需求,选择合适的主题和组件风格,以适应不同的用户群体和品牌形象。这种灵活性使得Ant Design可以应用于各种不同类型的项目,而不受兼容性的限制。 总的来说,Ant Design具有很好的兼容性,可以在各种主流浏览器和设备上正常运行。它的响应式布局和主题定制功能进一步增强了其适用性,使得开发者可以自由地选择和定制组件,以满足项目的特定需求。 ### 回答3: Ant Design 是一款由阿里巴巴前端团队推出的开源组件库,被广泛应用于各种前端项目中。它的兼容性问题可以从两个方面来讨论。 首先,Ant Design 在不同浏览器和操作系统上的兼容性表现良好。它经过了严格的测试,确保在主流浏览器如 Chrome、Firefox、Safari 和 Edge 上都能正常运行。无论是在 Windows 还是 macOS、Linux 等操作系统上,Ant Design 的组件都可以正常展示和交互,从而保证了用户在不同环境下的良好体验。 其次,Ant Design 的兼容性还包括对不同前端框架的支持。它可以与 React、Vue、Angular 等主流框架无缝集成,提供了相应的使用指南和示例代码,使得开发人员可以方便地在自己的项目中引入和使用 Ant Design 的组件。而且,Ant Design 还提供了自定义主题的功能,允许开发人员根据自己项目的需求来调整组件的颜色、样式等,从而更好地适配不同的应用场景。 总之,Ant Design 兼容性良好,既能够在不同浏览器和操作系统上正常运行,又能够与主流前端框架进行无缝集成。这使得开发人员可以放心地使用 Ant Design 来构建现代化的前端界面,提高开发效率,同时也提升了用户的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值