首页 > 其他分享 >setState异步更新数据导致的问题

setState异步更新数据导致的问题

时间:2024-07-17 10:30:09浏览次数:7  
标签:异步 show 更新 current actionRef ProDescriptions 组件 id setState

背景

子组件使用ProDescriptions组件,通过传入columns和request构建列表。

<Modal
    open={visible}
>
    <ProDescriptions
        columns={columns as any}
        request={getTableRequest as any}
    />
</Modal>

父组件通过调用子组件useImperativeHandle提供的方法,改变visible来控制子组件的渲染

由于ProDescriptions的数据要根据父组件传入的id进行网络请求,所以每次打开的ProDescriptions展示的数据理论上都不一样

useImperativeHandle(ref, () => ({
    show: (id: string) => {
      setJobId(id);
      setVisible(true);
    },
}));

于是请求函数就会通过jobId进行网络请求

但是在关闭该弹窗,重新打开并传入新id后,发现不再进行网络请求并且ProDescriptions渲染的数据与第一次相同

 

解决

  • 首先定义了actionRef节点去控制ProDescriptions组件,每次父组件调用show()后进行reload重新渲染。但是除去第一次打开弹窗,后面操作拿到的id都为上一次的id,依然有错。

    const actionRef = useRef<ActionInstance>()
    
    show:(id:string) => {
        setJobId(id)
        actionRef.current?.reload()
    }
  • 因为setState()是异步操作,数据更新存在延时性。所以改用useRef定义数据,通过改变ref.current进行数据改变。
    const jobId = useRef<string>('')
    
    show:(id:string) => {
        jobId.current = id
        actionRef.current?.reload()
    }

标签:异步,show,更新,current,actionRef,ProDescriptions,组件,id,setState
From: https://www.cnblogs.com/karle/p/18306768

相关文章

  • 【嵌入式】面试笔试问题整理 (持续更新)
    题目答案分离,方便自查自测快速跳转:面试笔试问题==1.关键字static有什么用途?(请至少说明两种)====2.嵌入式系统中经常要用到无限循环,如何用C编写死循环?====3.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里?====4.什么是平衡二叉树?====5.解释一下......
  • 异步任务队列
    #周朱张孙宋刘陈"胡王周朱谢周朱刘庄谢.黄"#周朱张孙宋刘陈"./宋周_胡王周朱谢周朱刘庄谢.黄"//#周朱张孙宋刘陈"孙周李袁王郭宋董陈朱.黄"#周朱张孙宋刘陈"赵陈罗曾庄朱罗.黄"#周朱张孙宋刘陈"欧陈朱刘陈郭姜邓曾.黄"#周朱张孙宋刘陈"邓周杨杨蒋胡赵.黄"#周朱张孙宋......
  • 前端面试必修--面试八股文(根据本人面试经验总结,持续更新)
    前端八股目录前端铜九铁十面试必备八股文——HTML&CSS-掘金(juejin.cn)webpack和vite之间的区别优点:缺点:1、前端工程化解决的问题1.为什么需要前端工程化?2.前端工程化流程常见请求头前端用户验证方案HTTP基本认证Session-Cookie认证Token认证JWT认证单点登录L......
  • Visual Studio使用——vs使用过程中常见问题积累,技巧集锦等,持续更新中
    目录引出VisualStudio使用自定义代码片段vs显示所有文件总结Idea安装和使用0.Java下载和IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写取消git的代码作者显示引出VisualStudio使用——vs......
  • 【CTF入门】BUUCTF Crypto刷题(持续更新)
    【CTF入门】BUUCTFCrypto刷题(持续更新)一眼就解密题目介绍如图:我们可以发现加密的字符串由base64编码,因此base64解码后即可解密。什么是base64编码,又应该如何解码呢?base64编码介绍原理:https://www.bilibili.com/video/BV1hk4y1S7PJ?vd_source=69c558b0c7be97607c79afbd75bd1......
  • 基于快照的异步远程复制介绍
    本文分享自天翼云开发者社区《基于快照的异步远程复制介绍》,作者:l****n1、简介:本文介绍了基于RBD快照的异步远程复制技术2、概念介绍:异步远程复制:通过定时的将业务端的数据同步到备份端,从而实现数据的备份和灾难恢复的技术;RBD快照:RBD快照是RBD在某一时刻全部数据的只读镜像......
  • 解决 React 中 setInterval 无法更新状态的问题:长按加速的实现
    解决React中setInterval无法更新状态的问题:长按加速的实现在开发React应用时,我们经常会遇到需要定时更新组件状态的场景。setInterval是一个常用的定时器函数,但在React中使用它时,可能会遇到状态无法更新的问题。今天,我们就来深入探讨一下这个问题,并通过一个长按加速的例......
  • 嵌入式C语言指针面试题大全(持续更新)
    什么是指针?指针在C语言中的作用是什么?在C语言中,指针是一种变量类型,它存储的是其他变量或数据结构的内存地址,而不是实际的数据值。指针允许程序员直接操作和管理内存,这是C语言的一个重要特性,也是它能够高效地处理资源和进行底层编程的原因之一。指针在C语言中有多种作用,包括......
  • 在JavaScript中,如何实现异步编程?
    在JavaScript中,如何实现异步编程?请列举几种常见的方法(如Promise、async/await)。在JavaScript中,异步编程是处理长时间运行的任务(如网络请求、文件读写、大量计算等)的关键。JavaScript是单线程的,但通过使用异步编程模式,我们可以编写出既不会阻塞主线程执行又能处理耗时任务的......
  • 杂乱无章的sql注入学习笔记(应该会持续更新)
    关于注入点:注入点不仅仅有.php?id=xxx只要是后端有交互的点都可能存在sql注入,黑盒情况下不知道后端,所以得fuzz,有的数据库会对你的cookieua进行查询操作,甚至是别的请求头,所以要都fuzz试试.甚至对图片的查询操作都可能存在注入点,思路要打开.学习sql语句:参考SQL通配符......