React antd使用踩坑总结2

这篇博客总结了在使用React Antd框架时遇到的一些问题及解决方案,包括Popover在固定父元素下的定位问题,Table组件的选择与多选问题,表格选中状态的保持,TextArea的样式与高度设置,以及Select的模糊搜索和禁用输入空格的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:初级react,记录工作中问题,积累经验,如有问题请多赐教!

1、处理Ant Design 3.24.3版本Popover在父元素fixed的情况下跟随滚动条改变位置的问题

背景:

1.导航栏fixed到顶部

2.悬浮出现popover气泡卡片,但气泡卡片随着滚动条滚动改变位置

解决方案:

在popover上使用 getPopupContainer={triggerNode => triggerNode.parentNode}

2、处理antd table其中某一项的值如果超出,使用....显示

{
  title: 'config_content',
  key: 'Content',
  onCell: () => {
    return
        {
          style: {
            maxWidth: 600,
            overflow: 'hidden',
            whiteSpace: 'nowrap',
            textOverflow: 'ellipsis',
            cursor: 'pointer'
                 }
        }
},

3、Antd Table无法选择&多选问题,根据antd table 可选择案例,发现点击任意元素都会变成全选,或者取消全选,无法单个选择

原因dataSource 里面没有key属性,需要给Table 添加 rowKey="id"

4、Ant table表格选中后点击下一页上一页选中的内容丢失

只需要在 Table 标签的 rowSelection 属性对象内输入

 preserveSelectedRowKeys: true , 即可

let rowSelection = { preserveSelectedRowKeys: true, };
<Table  rowSelection={rowSelection}  />

5、antd 中的TextArea样式以及固定高度设置

固定高度使用: row={5}

<TextArea style={{ width: '100%', resize: 'none' }} rows={5} />

6、antd select的模糊搜索以及多选

<Form form={form}>
    <Form.Item label='标签' name="TagName" labelAlign="left" >
    <Select 
      mode="multiple"  / /支持多选
      showSearch
      allowClear
      filterOption={(input, option: any) => option?.props.children?.indexOf(input) >= 0}   / /模糊搜索
      getPopupContainer={triggerNode => triggerNode.parentNode}>
    {handlerUser.map((res) => (
        <Select.Option key={res?.id} value={res?.TagName}> / /支持鼠标点到select框后,将后端数据展示到下拉框
          {res?.TagName}
        </Select.Option>
    ))}
    </Select >
</Form.Item>
</Form>

7、antd的form 的input输入框怎么限制不能输入空格

AntDesign中的Form表单其实提供了非常丰富的校验方式,有两种方式解决input不能输入空格的问题(具体看自己的需求)

<Form.Item label="名字">
  {getFieldDecorator('name', {
    rules: [
        {
         required: true,
         message: '请输入名字',
        },
   // 方式一:正则匹配(提示错误,这种会在提交表单时给提示,阻止表单提交)
       { pattern: /^[^\s]*$/, message: '禁止输入空格',}
],

  // 方式二:粗暴点<Input>不允许输入空格(其实是将e.tartget.value转成控件自己的值)
  // 这个方法的用途非常强大,还可以结合upload做一些文件上传之后的回调处理
      getValueFromEvent: (event) => {
         return event.target.value.replace(/\s+/g,"")
        },
})
(<Input size="large" placeholder="请输入名字" maxLength={20} />)}
</Form.Item>

### 使用 Ant Design (antd) 和 React 动态生成表单 在 React 中利用 Ant Design 创建动态表单,特别是当这些表单依赖于表格数据时,可以遵循特定的方法论。这种方法不仅涉及状态管理和组件更新机制,还涉及到如何有效地处理复杂的数据结构。 #### 初始化项目与安装必要库 为了开始构建这样的应用,首先需要确保已安装了 `react` 及其关联的开发环境,并且还需要引入 `antd` 库作为UI框架[^2]: ```bash npm install antd react react-dom ``` #### 设计思路 创建一个能够响应表格数据变化而自动调整自身的表单,核心在于监听源数据的变化并通过修改内部的状态来触发重新渲染。这不同于传统的DOM操作方式;相反,应该专注于保持应用程序逻辑的一致性和可预测性[^1]。 #### 实现步骤 ##### 构建基础架构 定义初始状态用于存储来自服务器或其他地方获取到的表格记录列表。每当接收到新的或更新后的条目集合时,都会将其赋值给该状态变量以便后续使用。 ##### 编写主要功能模块 下面给出一段简化版的例子说明怎样依据上述原则编写代码片段: ```jsx import React, { useState } from 'react'; import { Form, Input, Button, Space } from 'antd'; const DynamicFormFromTableData = ({ tableData }) => { const [formItems, setFormItems] = useState([]); // 基于传入的tableData初始化表单项 React.useEffect(() => { let newFormItemArray = []; for (let i = 0; i < tableData.length; ++i){ newFormItemArray.push( ( <> <Form.Item name={`name${i}`} label="Name"> <Input /> </Form.Item> {/* 更多字段可以根据实际需求添加 */} </> ) ); } setFormItems(newFormItemArray); }, [tableData]); return ( <Space direction="vertical" style={{ width: '100%' }}> <Form layout="horizontal">{formItems}</Form> <Button type="primary">Submit</Button> </Space> ); }; ``` 此段代码展示了如何接收外部传递过来的表格数据(`tableData`)并据此构造出一系列对应的输入控件。每次`tableData`发生变化时,都会触发一次副作用函数执行从而刷新界面显示的内容。 #### 进一步优化建议 - **错误验证**: 对用户提交的信息做适当校验。 - **样式定制**: 利用CSS-in-JS工具包或者其他手段美化最终呈现效果。 - **性能考量**: 如果预期会有大量并发请求,则需考虑缓存策略以减轻服务端压力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值