网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月29日
漏签
0
天
前端吧
关注:
223,845
贴子:
1,378,586
看贴
图片
吧主推荐
游戏
17
回复贴,共
1
页
<<返回前端吧
>0< 加载中...
有没有react 技术大牛?解答一下我在开发遇到的一个问题
只看楼主
收藏
回复
get2you
初涉江湖
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我在demo方法里setFileUrl了这个链接地址,我知道setFunc是异步执行的,所以延迟调用图2的方法,但是我无论延迟多久,第一次进入页面执行图2函数时,依旧是undefined,我现在方案只能是通过三元运算符来暴力解决,我还是没弄懂其中的原理
为什么延迟后还是undefined,是闭包的问题?
11刚刚给
江湖少侠
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
debug堆栈跟踪一下不就知道咋回事了吗
不羡天上月
后起之秀
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
闭包了,ref去保存这个url,settimout里面使用ref的current取值
ohayou12
初涉江湖
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
闭包了,settimeout的入参是一个匿名函数,执行settimeout的时候这个匿名函数的上下文中的fileUrl还是个undefined,然后等了一会,fileUrl更新了,导致demo和handleOnClick函数也更新了,但之前执行的settimeout中的匿名函数是不会更新的,所以fileUrl就一直是空的。
react提倡的是数据驱动状态,你用useState的话,配合其他hook函数可以解决这个问题。
更好的是给handleOnClick加一个参数,直接把url传进来,就不要用useState了,或者用useRef也行
牛只耕田
武林新贵
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
react 的state,被叫做不可变数据,set后的值是新的值。而我猜你这个函数里的值不管set多少次,里面的fileurl一直都是一开始那个。
纷念
初涉江湖
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
官网有讲的
https://zh-hans.react.dev/reference/react/useState#ive-updated-the-state-but-logging-gives-me-the-old-value
救救我
后起之秀
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我不会
Spark
武林高手
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不是你这么玩的。应该用useeffect监听
一抔星尘
江湖少侠
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
handleOnClick 用usecallback包一下,依赖是fileUrl
喵了个咪吖
武林新贵
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
useeffect监听,loader/action触发 都可以
你也哦哦噢耶
江湖少侠
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
lz需要了解一下纯函数
小雨写立可白z
江湖少侠
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
其实这不是闭包得原因,react更新机制,这是react的基础啊,合成事件中批量异步更新,这里的异步不是callback那种,而是react提高性能的一种延迟更新的手段。类似vue中的nexttick,你想他同步,有很多种办法,外面保存一份引用,或者放在定时器里,或者直接返回一个update函数,都可以
雪下知红
四方游侠
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
vue是不是就不会出现这种现象了
偏偏ik
四方游侠
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
可以用useEffect执行下面的函数,把fileurl作为依赖项
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示