ant-design / ant-design/pro-components

🧐[问题] EditableProTable column formItemProps

Open
#9,184 3 comments 0 reactions 0 assignees View on GitHub
⭕️ bug form 🧱 antd
Dominant language
TypeScript
Stars
4.8k
Forks
1.4k
Avg merge
10h 44m
Merged PRs (30d)
3

Description

提问前先看看:

https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md

### 🧐 问题描述

EditableProTable column formItemProps rules required 动态更新UI提示不生效,
第2行 状态字段更新后,描述字段的必填标识无法实时更新

### 💻 示例代码

`
import type {
EditableFormInstance,
ProColumns,
ProFormInstance,
} from '@ant-design/pro-components';
import {
EditableProTable,
ProCard,
ProForm,
ProFormDependency,
ProFormField,
} from '@ant-design/pro-components';
import React, { useRef, useState } from 'react';

type DataSourceType = {
id: React.Key;
title?: string;
decs?: string;
state?: string;
created_at?: number;
update_at?: number;
children?: DataSourceType[];
};

const defaultData: DataSourceType[] = [
{
id: '624748504',
title: '活动名称一',
decs: '这个活动真好玩',
state: 'open',
created_at: 1590486176000,
update_at: 1590486176000,
},
{
id: '624691229',
title: '活动名称二',
decs: '',
state: 'closed',
created_at: 1590481162000,
update_at: 1590481162000,
},
];

export default () => {
const [editableKeys, setEditableRowKeys] = useState(() =>
defaultData.map((item) => item.id),
);
const formRef = useRef>();
const editorFormRef = useRef>();
const columns: ProColumns[] = [
{
title: '活动名称',
dataIndex: 'title',
formItemProps: () => {
return {
rules: [{ required: true, message: '此项为必填项' }],
};
},
width: '30%',
},
{
title: '状态',
key: 'state',
dataIndex: 'state',
valueType: 'select',
valueEnum: {
all: { text: '全部', status: 'Default' },
open: {
text: '未解决',
status: 'Error',
},
closed: {
text: '已解决',
status: 'Success',
},
},
},
{
title: '描述',
dataIndex: 'decs',
editable: (text, record, index) => {
// console.log('editable', text, record, index);
return true;
},
formItemProps: (form, config) => {
const entry = config?.entry;
const required = entry.state === 'closed';
return {
rules: [
{
required: required,
},
],
required: required,
};
},
fieldProps: (form, config) => {
return {
// disabled: config?.entry?.state === 'open',
// value: config?.entry?.state === 'open' ? '':config?.entry?.decs
};
},
},
{
title: '活动时间',
dataIndex: 'created_at',
valueType: 'date',
},
{
title: '操作',
valueType: 'option',
width: 200,
render: (text, record, _, action) => [
{
const tableDataSource = formRef.current?.getFieldValue(
'table',
) as DataSourceType[];
formRef.current?.setFieldsValue({
table: tableDataSource.filter((item) => item.id !== record.id),
});
}}
>
删除
,
],
},
];

return (

formRef={formRef}
initialValues={{
table: defaultData,
}}
validateTrigger="onBlur"
onFinish={(value) => {
console.log('value', value);
}}
>

rowKey="id"
scroll={{
x: 960,
}}
editableFormRef={editorFormRef}
headerTitle="可编辑表格"
maxLength={5}
name="table"
recordCreatorProps={{
position: 'bottom',
record: () => ({ id: (Math.random() * 1000000).toFixed(0) }),
}}
columns={columns}
editable={{
type: 'multiple',
editableKeys,
onChange: setEditableRowKeys,
actionRender: (row, config, defaultDom) => {
return [defaultDom.delete];
},
}}
/>



{({ table }) => {
return (

);
}}




);
};

`

### 🚑 其他信息

Image
Image
Image

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the example with EditableProTable, focusing on the description column's formItemProps and its dynamic required rule after the state field changes. Trace how the table form updates column metadata and validation indicators; done means the description field's required marker and validation rule update immediately when the row state changes.

Written by the indexing model from the issue text.

Assessment

Tech stack
react, typescript
Domain
frontend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.