当前位置: 首页 > news >正文

【react hook】在react hook组件中,使用Antd Table组件,columns数据异步获取,list数据更新但没有rerender解决办法

情景描述

我们有一个react组件,显示了一个Antd Table组件,设置了一个columns变量并复制给Table的columns属性,由于我们请求的datasource来源是异步的,示例伪代码如下:

const [columns, setColumns] = useState([]); // 注意columns放在全局直接定义,是无法通过依赖提醒react进行rerender的!!!已尝试使用useMemo包裹全局的columns进而触发依赖更新的计划失败。
const [datasource, setDatasource] = useState([]);
useEffect(() => {// 假设这边是一个请求列表数据的promise.then回调的伪代码promise.then(res) => {let list = JSON.parse(JSON.stringify(res.list));// 数据格式如下注释:// list = [// 	a: [//		{ key: 'address', value: '广东省汕头市', lng: 114.12, lat: 68.33 }//	],//	b: 1,//	c: 2,// ];这边做一些异步操作async/await...// list 中的a数组的每个元素的地址value需要根据高德地图API转换成特定国际化语言环境,比如中文转英文,这个时候就需要异步调用逆编码根据经纬度获取英文地址了,这个过程是异步且耗费时间的,当react同步代码执行完毕后,数据仍旧过了200ms才返回,这时react的检测已经过期了,无法触发rerendersetDatasource(list);}
}, [])useEffect(() => {setColumns([{key: 'address',...render: (text, row) => {// 这边的数据依赖于res.list的数据进行异步映射赋值加工后返回的}},// ...省略]);
}, [datasource])

其中,a属性是一个数组,这意味着无法在第二个useEffect中直接指定datasource作为依赖项,因为它是浅比较的,需要使用JSON.stringify(datasource)作为依赖,检测字符串长度是否发现变化。

并且因为以上的案例,我们发现数据虽然打印出来更新了,但是却没有触发rerender,导致columns的数据仍旧是上一次的,最蠢的办法是用setTimeout延迟设置,但是这样准确性低,所以这时,我们需要再增加一个状态,用来提示更新。

因此,修改后代码如下:

const [needRefresh, setNeedRefresh] = useState('');
		// 假设以下代码是如上代码的异步操作详情,那么setNeedRefresh将再循环的最后一次进行标记,标记所有项的异步数据都获取并设置成功了。const arr = [];draftAbstract.forEach(async (t, i) => {const addr = await getSearchAddressByLang(itemData.longitude, itemData.latitude, addr);values = addr || itemData?.address;t.itemValue = values;arr.push(t);// 地址全部计算完成,设置异步完成标记,// 将needRefresh设置为columns需要更新的依赖项,避免同步检测时因异步结果没有得到时无法正确渲染if (i + 1 === draftAbstract.length) {setNeedRefresh(new Date().getTime());}});
useEffect(() => {setColumns([{key: 'address',...render: (text, row) => {// 这边的数据依赖于res.list的数据进行异步映射赋值加工后返回的}},// ...省略]);
}, [JSON.stringify(datasource), needRefresh])

相关文章:

【react hook】在react hook组件中,使用Antd Table组件,columns数据异步获取,list数据更新但没有rerender解决办法

情景描述 我们有一个react组件,显示了一个Antd Table组件,设置了一个columns变量并复制给Table的columns属性,由于我们请求的datasource来源是异步的,示例伪代码如下: const [columns, setColumns] useState([]); /…...

ChatGPT的图识别来了

前几天ChatGPT推出了Dall-E 3功能,可以根据文字和描述一段话来生成一个或者一组图。 这次又来重磅了,图识别又来了!换句话说,也即是文生图,图生文都可以实现了,一起来试试 1、解释图中的意思 &#xff0…...

java Stream编程笔记

文章目录 Stream介绍什么是 Stream? Stream中间操作过滤操作(filter)映射操作(map)排序操作(sorted)截断操作(limit 和 skip) Stream 的终止操作forEach 和 peek聚合操作…...

顶顶通语音识别使用说明

介绍 顶顶通语音识别软件(asrproxy)是一个对接了多种语音识别接口的语音识别系统。可私有化部署(支持中文英文和方言等,支持一句话识别、实时流识别、多声道录音文件识别。 原理 asrproxy内嵌了阿里达摩院的开源语音识别工具包FunASR,后续我们也会使用自有的预料…...

重磅发布 OpenAI 推出用户自定义版 ChatGPT

文章目录 重磅发布 OpenAI 推出用户自定义版 ChatGPT个人简介 重磅发布 OpenAI 推出用户自定义版 ChatGPT OpenAI 首届开发者大会 (OpenAI DevDay) 于北京时间 11 月 7 日凌晨 02:00 开始,大会上宣布了一系列平台更新。其中一个重要更新是用户可以创建他们自己的自定…...

Java 幼儿园(20231111)读取 json 文件

1、功能场景 (1)多人合作开发一个功能模块时,需要调用外部接口 (2)对方接口的开发工作还没有完成,只能提供一个返回值的示例文件 json 文件。 (3)返回的 json 数据多达几百个字段。 …...

云计算、大数据技术的智慧工地,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式

智慧工地是利用物联网、云计算、大数据等技术,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式。 智慧工地架构: 1、终端层: 充分利用物联网技术、移动应用、智能硬件设备提高现场管控能力。通过RFID、传感器、摄像头、手机等终…...

功能案例 -- 通过开关,改变白天和黑夜

效果展示 代码展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>:root {--default-bac-color: #f…...

Linux编写一个极简版本的Shell

Linux编写一个极简版本的Shell &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容在Linux环境下&#xff…...

亚马逊云AI应用科技创新下的Amazon SageMaker使用教程

目录 Amazon SageMaker简介 Amazon SageMaker在控制台的使用 模型的各项参数 pytorch训练绘图部分代码 Amazon SageMaker简介 亚马逊SageMaker是一种完全托管的机器学习服务。借助 SageMaker&#xff0c;数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型&#…...

Eigen:旋转向量(Angle-Axis)转换为四元素和旋转矩阵

0. 在固定欧拉角系下。 绕固定系旋转&#xff0c;旋转的先后顺序为X、Y、Z。当然也支持XYZ的任意顺序旋转。 1. 转为四元素 Eigen::Quaterniond q Eigen::AngleAxisd(yaw, Eigen::Vector3d::UnitZ()) *Eigen::AngleAxisd(pitch, Eigen::Vector3d::UnitY()) *Eigen::AngleAxi…...

C#8.0本质论第十二章--泛型

C#8.0本质论第十二章–泛型 C#通过泛型来促进代码重用&#xff0c;在词义上等价于C模板。 在泛型编程中&#xff0c;数据类型也是一种参数。 12.1如果C#没有泛型 为object的方法使用值类型时&#xff0c;“运行时”将自动对它进行装箱&#xff0c;获取值类型的实例时则需要…...

Python与ArcGIS系列(七)自动化打印地图

目录 0 简述1 获取可用打印机列表2 打印地图3 导出地图至PDF4 导出地图至图像0 简述 本篇介绍如何利用arcpy实现获取可用打印机列表、打印地图、导出地图至PDF和图像。 1 获取可用打印机列表 通过arcpy提供的ListPrinterNames()函数可以生成可用的打印机列表。 import arcpy.m…...

基于STM32单片机抢答器设计

**单片机设计介绍&#xff0c; 基于STM32单片机抢答器设计-Proteus仿真 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于STM32单片机的抢答器设计可以用于教育和培训场景中的抢答游戏或考试环节。以下是一个基本的介绍设计步骤…...

冯·诺伊曼体系结构--操作系统

文章目录 1.认识冯诺依曼系统1.1约翰冯诺依曼1.2冯诺依曼结构1.3存储器的读写速度1.4对冯诺依曼结构的认识1.5冯诺依曼结构在生活中的演示 2.操作系统--“搞管理”的软件2.1概念2.2OS存在的意义2.3管理的方式2.4系统调用和库函数概念 1.认识冯诺依曼系统 1.1约翰冯诺依曼 1.2冯…...

IDEA插件开发--持久化配置信息方案

这里写自定义目录标题 配置信息持久化存储保存配置文件的方式每种方式的实现方案1.PropertiesComponent&#xff1a;2.PersistentStateComponent&#xff1a;3.Project Settings&#xff1a;4.外部文件&#xff1a; 5.数据库&#xff1a;6.加密数据&#xff1a;7,自定义配置文件…...

Vscode禁止插件自动更新

由于电脑的vscode版本不是很新。2022.10月份的版本1.7.2&#xff0c;电脑vscode的python插件装的也是2022年4月份的某个版本&#xff0c;但插件经常自动更新&#xff0c;导致python代码无法Debug,解决办法&#xff1a; 点设置&#xff0c;搜autoUpdate, 把红色框选成无...

Zookeeper篇---第六篇

系列文章目录 文章目录 系列文章目录一、请简述Zookeeper的选主流程二、为什么Zookeeper集群的数目,一般为奇数个?三、知道Zookeeper监听器的原理吗?一、请简述Zookeeper的选主流程 Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做…...

mysql数据库存储过程之游标(光标cursor)

游标是用来存储查询结果集的数据类型&#xff0c;在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、open、fetch和close。 一、语法。 #声明游标 declare 游标名称 cursor for 查询语句; #开启游标 open 游标名称; #获取游标记录 fetch 游标…...

「帝国风暴兵」加入 The Sandbox,推出真实的全新人物化身系列和体验!

我们很高兴宣布与流行文化中最具标志性的娱乐品牌 Shepperton 设计工作室的「帝国风暴兵」达成合作伙伴关系。这一合作标志着该科幻品牌首次进入元宇宙&#xff0c;让风暴兵的粉丝们以全新的方式体验「帝国风暴兵」。 在这个体验中&#xff0c;玩家将置身于帝国风暴兵的营地&am…...

别再只会while(1)了!聊聊STM32裸机开发的6种实用架构,新手也能选对

STM32裸机开发的6种架构实战指南&#xff1a;从超级循环到事件驱动 第一次用STM32做温控器项目时&#xff0c;我把所有代码塞进了while(1)循环。两周后&#xff0c;当需要增加蓝牙控制和OLED界面时&#xff0c;代码已经变成了一团乱麻——按键检测延迟导致温度调节失灵&#xf…...

FanControl:告别风扇噪音困扰,Windows用户必备的智能散热管家

FanControl&#xff1a;告别风扇噪音困扰&#xff0c;Windows用户必备的智能散热管家 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/…...

Windows Cleaner:终极解决方案让你的电脑C盘告别爆红,运行速度提升300%

Windows Cleaner&#xff1a;终极解决方案让你的电脑C盘告别爆红&#xff0c;运行速度提升300% 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾因C盘爆红…...

Nanbeige 4.1-3B极简界面效果:超长对话历史滚动+性能优化实测

Nanbeige 4.1-3B极简界面效果&#xff1a;超长对话历史滚动性能优化实测 如果你厌倦了传统大模型Web界面那种拥挤的侧边栏、死板的方形头像和卡顿的对话体验&#xff0c;那么今天分享的这个项目可能会让你眼前一亮。这是一个专为南北阁&#xff08;Nanbeige&#xff09;4.1-3B…...

SiameseUniNLU惊艳效果展示:对话历史中跨轮次实体消歧与关系动态演化追踪

SiameseUniNLU惊艳效果展示&#xff1a;对话历史中跨轮次实体消歧与关系动态演化追踪 1. 引言&#xff1a;当AI真正“听懂”了你的连续对话 想象一下&#xff0c;你和朋友聊起一部电影。第一句你说&#xff1a;“我昨天看了《流浪地球2》。” 朋友问&#xff1a;“主演是谁&a…...

BEYOND REALITY Z-Image精彩案例分享:无磨皮、无失真、通透肤质生成作品

BEYOND REALITY Z-Image精彩案例分享&#xff1a;无磨皮、无失真、通透肤质生成作品 1. 项目概述 BEYOND REALITY Z-Image是一款专注于高精度写实人像生成的AI创作引擎&#xff0c;基于Z-Image-Turbo底座和BEYOND REALITY SUPER Z IMAGE 2.0 BF16专属模型打造。这个模型专门针…...

Z-Image-Turbo-rinaiqiao-huiyewunv 结合STM32:嵌入式设备上的轻量级AI视觉原型

Z-Image-Turbo-rinaiqiao-huiyewunv 结合STM32&#xff1a;嵌入式设备上的轻量级AI视觉原型 1. 引言 你有没有想过&#xff0c;给一块小小的单片机装上“眼睛”&#xff0c;让它能看懂周围的世界&#xff1f;比如&#xff0c;让一个智能花盆识别植物是否缺水&#xff0c;或者…...

当图论遇到优化:手把手教你用分支限界法解决带权顶点覆盖问题(C++实现)

当图论遇到优化&#xff1a;手把手教你用分支限界法解决带权顶点覆盖问题&#xff08;C实现&#xff09; 在算法优化的世界里&#xff0c;图论问题总是散发着独特的魅力。想象这样一个场景&#xff1a;你需要在一个城市部署最少数量的监控摄像头&#xff0c;每个位置的安装成本…...

别只盯着速度!STM32G474 CCM SRAM在电机控制FOC算法中的实战避坑指南

STM32G474 CCM SRAM在电机控制FOC算法中的高阶应用与避坑指南 电机控制领域对实时性的苛刻要求&#xff0c;让每一位工程师都在与时间赛跑。当你的PID调节器因为几微秒的延迟导致电机震动&#xff0c;或是中断服务程序(ISR)响应不及时引发系统不稳定时&#xff0c;CCM SRAM这个…...

Rust async trait 的底层调度逻辑解析

Rust async trait 的底层调度逻辑解析 Rust 的异步编程模型以其高效和灵活著称&#xff0c;而 async trait 作为异步编程的核心抽象之一&#xff0c;其底层调度逻辑直接影响性能与资源利用率。理解其工作机制不仅能帮助开发者写出更高效的代码&#xff0c;还能避免常见的并发陷…...