Antd组件常见问题

简介: Antd组件常见问题

1DatePicker

问题描述:不允许选择当前时间之前的时间;

解决方法:

<DatePicker
   showNow={false}
   format="YYYY-MM-DD HH:mm:ss"
   disabledDate={disabledDate}
   disabledTime={disabledTime}
   showTime
/>
const range = (start: any, end: any) => {
    const result = [];
    for (let i = start; i < end; i++) {
      result.push(i);
    }
    return result;
  }
  const disabledDate = (current: any) => current && current < moment().endOf('day').subtract(1, "days");
  const disabledTime = (date: any) => {
    const hours = moment().hours();
    const minutes = moment().minutes();
    const seconds = moment().seconds();
    // 当日只能选择当前时间之后的时间点
    if (!date) {
      return {
        disabledHours: () => range(0, 24),
        disabledMinutes: () => range(0, 60),
        disabledSeconds: () => range(0, 60)
      };
    }
    if (date && moment(date).date() === moment().date()) {
      return {
        disabledHours: () => {
          if (moment(date).date() === moment().date()) {
            return range(0, 24).splice(0, hours)
          }
        },
        disabledMinutes: () => {
          if (moment(date).hours() === moment().hours()) {
            return range(0, 60).splice(0, minutes + 1)
          }
        },
        disabledSeconds: () => {
          if (moment(date).hours() === moment().hours() && moment(date).minutes() === moment().minutes()) {
            return range(0, 60).splice(0, seconds + 1)
          }
        }
      };
    }
    return {
      disabledHours: () => [],
      disabledMinutes: () => [],
      disabledSeconds: () => []
    };
  };

2、FormList中嵌套FormList使用;

案例描述:活动为动态增减,且每个活动下对应的嘉宾也是动态增减的;

解决方案:

<Form.List name='topics'>
    {
      fields => {
        return (
          <Tabs>
            {fields.map((field, index) => {
              return (
                < TabPane
                  tab={topicTitleList[index]}
                  key={index}
                  forceRender={true}>
                  <div>
                    <FormItem
                      labelCol={
                        {
                          xs: { span: 24 },
                          sm: { span: 12 }
                        }
                      }
                      wrapperCol={
                        {
                          xs: { span: 24 },
                          sm: { span: 12 }
                        }
                      }
                      name={[field.name, 'name']}
                      fieldKey={[field.fieldKey, 'name']}
                      label="活动名称"
                      rules={[{
                        required: true, message: '请填写活动名称',
                      }]}
                    >
                      <Input maxLength={20} placeholder="请输入..." />
                    </FormItem>
                    <Form.List name={[field.name, 'guests']}>
                      {
                        (itemFields, { add, remove }) => {
                          return (<div>
                            {
                              itemFields.map((item, itemIndex) => {
                                <FormItem
                                  labelCol={
                                    {
                                      xs: { span: 24 },
                                      sm: { span: 12 }
                                    }
                                  }
                                  wrapperCol={
                                    {
                                      xs: { span: 24 },
                                      sm: { span: 12 }
                                    }
                                  }
                                  name={[item.name, 'name']}
                                  fieldKey={[item.fieldKey, 'name']}
                                  label="嘉宾姓名"
                                  rules={[{
                                    required: true, message: '请填写嘉宾姓名',
                                  }]}
                                >
                                  <Input maxLength={20} placeholder="请输入..." />
                                </FormItem>
                              })}
                          </div>)
                        }
                      }
                    </Form.List>
                  </div>
                </TabPane>
              )
            })}
          </Tabs>
        )
      }
    }
  </Form.List >

3、Upload上传限制文件格式;

问题描述:通过设置accept接受上传的文件类型,发现当选择所有文件上传时,还是可以选择其他格式的文件进行上传;

解决方案:beforeUpload 返回 false Promise.reject 时,只用于拦截上传行为,不会         阻止文件进入上传列表(原                      因)。如果需要阻止列表展现,可通过返回 Upload.LIST_IGNORE 实现。

<Upload
   accept="image/*"
   listType="picture"
   beforeUpload={(file) => {
     if (file.type === "image/png") {
     handleGuestsChange(file, customData[index].guests[itemIndex].id)
     } else {
     message.error("请上传png图片文件!                                                                                               ");                                                                        return Upload.LIST_IGNORE;
   }
  }
}
</Upload>


相关文章
uni-app监听页面滚动
uni-app监听页面滚动
900 0
|
JavaScript 前端开发
【面试题】Vue2为什么能通过this访问到data、methods的属性或方法
【面试题】Vue2为什么能通过this访问到data、methods的属性或方法
231 0
|
前端开发 UED
React 消息提示组件 Toast
本文从基础概念出发,逐步介绍如何在 React 中实现一个简单的 Toast 组件,包括基本功能、状态管理和样式设计。并通过具体代码示例,探讨了多个 Toast 同时显示、Toast 消失后立即重新显示、消失动画和样式冲突等常见问题及其解决方案。希望本文能帮助读者更好地理解和使用 Toast 组件,提升用户体验。
355 23
|
JavaScript 前端开发
阻止事件冒泡与捕获
【10月更文挑战第15天】
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
510 0
|
前端开发
【threejs教程】终于搞明白了!原来threejs中的透视相机这么简单!
【8月更文挑战第5天】深入学习threejs中的透视相机!
1021 2
【threejs教程】终于搞明白了!原来threejs中的透视相机这么简单!
|
缓存 JavaScript 前端开发
JavaScript模块化开发:ES6模块与CommonJs的对比与应用
JavaScript模块化开发:ES6模块与CommonJs的对比与应用
287 2
|
JavaScript 索引
Vue中对象或数组数据更新但视图不刷新问题的解决策略
Vue中对象或数组数据更新但视图不刷新问题的解决策略
1092 0