pro-components icon indicating copy to clipboard operation
pro-components copied to clipboard

🐛[BUG] EditableProTable 动态修改表格内字段,UI正确但数据不同步!

Open ts39 opened this issue 2 years ago • 4 comments

🐛 bug 描述

EditableProTable 动态修改表格内字段,UI正确但数据不同步!

📷 复现步骤

官网示例错误,地址:EditableProTable 与 FormItem 配合

💻 复现代码

// 可直接运行的错误示例代码 🔥🔥 👀
import type {
  ActionType,
  ProColumns,
  ProFormInstance,
  EditableFormInstance,
} from '@ant-design/pro-components';
import {
  EditableProTable,
  ProForm,
  ProFormDependency,
  ProFormField,
  ProCard,
} from '@ant-design/pro-components';
import { Input, message, Button, Select } from 'antd';
import React, { useState, useRef } from 'react';
type DataSourceType = {
  id: React.Key;
  field1: string;
  field2: string;
};

const defaultData: DataSourceType[] = [
  {
    id: 10,
  } as DataSourceType,
];

export default () => {
  const formRef = useRef<ProFormInstance>();
  const editableFormRef = useRef<EditableFormInstance<DataSourceType>>();
  const actionRef = useRef<ActionType>();
  const [editableKeys, setEditableRowKeys] = useState<React.Key[]>(() =>
    defaultData.map((item) => item.id),
  );

  const columns: ProColumns<DataSourceType>[] = [
    {
      title: '字段1',
      dataIndex: 'field1',
      renderFormItem: (_) => {
        return (
          <Input
            placeholder="输入123后提交,看控制台"
            onChange={(e) => {
              editableFormRef.current?.setRowData?.(_.index!, {
                field2: e.target.value,
              });
            }}
          />
        );
      },
    },
    {
      title: '动态设置值的字段',
      dataIndex: 'field2',
    },
  ];

  return (
    <ProForm<{
      dataSource: DataSourceType[];
    }>
      className="sr-form"
      formRef={formRef}
      request={() => {
        return Promise.resolve({
          dataSource: defaultData,
        });
      }}
      onFinish={async (values) => {
        await editableFormRef.current?.validateFields();
        console.warn('输入123,拿到的 field2 却是 12');
        console.log(values);
        // message.success('提交成功');
      }}
    >
      <ProForm.Item name="dataSource" trigger="onValuesChange">
        <EditableProTable<DataSourceType>
          actionRef={actionRef}
          toolBarRender={() => [
            <Button
              type="primary"
              onClick={() => {
                actionRef.current?.addEditRecord?.(
                  {
                    id: Date.now(),
                  },
                  {
                    newRecordType: 'dataSource',
                    position: 'bottom',
                  },
                );
              }}
            >
              新增一行
            </Button>,
          ]}
          bordered
          headerTitle={'页面上没问题,但是数据有问题'}
          rowKey="id"
          columns={columns}
          recordCreatorProps={false}
          editableFormRef={editableFormRef}
          editable={{
            type: 'multiple',
            editableKeys,
            onChange: setEditableRowKeys,
            actionRender: (row, _, dom) => {
              return [dom.delete];
            },
          }}
        />
      </ProForm.Item>

      <ProForm.Item>
        <ProCard
          title="🔴 拿到的表格数据错误,【请看 field2 字段的数据】❗️❗️👇👇"
          headerBordered
          collapsible
          defaultCollapsed={false}
        >
          <ProFormDependency name={['dataSource']}>
            {({ dataSource }) => {
              return (
                <ProFormField
                  ignoreFormItem
                  fieldProps={{
                    style: {
                      width: '100%',
                    },
                  }}
                  mode="read"
                  valueType="jsonCode"
                  text={JSON.stringify(dataSource)}
                />
              );
            }}
          </ProFormDependency>
        </ProCard>
      </ProForm.Item>
    </ProForm>
  );
};

🚑 其他信息(gif 演示)

1. 官网demo的错误

官方示例bug

2. 我遇到的错误演示

2

ts39 avatar Jul 22 '22 13:07 ts39

以下的 Issues 可能会帮助到你 / The following issues may help you

  • [#5354][EditableProTable隐藏操作列👑 [需求]][61%]

github-actions[bot] avatar Jul 22 '22 13:07 github-actions[bot]

同样问题,搞了两天,state在action里没有正确同步

yaoguoba avatar Jul 23 '22 15:07 yaoguoba

确实,getFieldsValue 没有更新,getFieldValue 更新了

shiningstarts avatar Aug 22 '22 08:08 shiningstarts

"@ant-design/pro-table": "2.78.3" 我的版本没问题

charminghiker avatar Sep 28 '22 10:09 charminghiker