- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
使用useImperativeHandle时父组件第一次没拿到子组件的问题
目录用useImperativeHandle父组件第一次没拿到子组件背景需求问题解决方法用useImperativeHandle让父组件操纵子组件的状态和方法
用useImperativeHandle父组件第一次没拿到子组件
背景需求
一个tab两个按钮A、B,默认选中的A,当点击到B时需要显示B对应的图表。
考虑到B的图表在页面加载时已经初始化完成,所以点击B时再调用图表的resize方法。
由于tab中的图表是写在子组件里,所以通过useImperativeHandle实现父组件调用子组件方法,React版本react:^18.1.0,代码如下
父组件:
constchildRef=useRef()
constitem=[{
????name:XXXX,
????content:RunningRecordcRef={childRef}/,
????handClick:childRef.current.resizeChart
return
??……
??li()={
??????setTimeout(()={
????????console.log(~~item.handClick,item.handClick)
????????item.handClick.()
??????},200)
????}}
????key={item.name}
????{item.name}
??/li
??……
??RunningRecordcRef={childRef}/
/
子组件:
functionRunningRecord({cRef}){
??……
??useImperativeHandle(cRef,()=({
????resizeChart:()={dosomething……}
??}))
问题
这样写在本地开发模式中正常运行,但生产环境中父组件首次加载不能拿到子组件的方法,需tab切换到A再次且到B才行。
猜想原因,大概在生产环境中,父组件把子组件暴露出来的方法绑定到UI中的点击事件中,而子组件初始化的时机晚,初始完成后并没有把事件传回来。
这个猜想不一定准确,欢迎知道的小伙伴们补充。
解决方法
在父组件中,将子组件赋值的过程放在useEffect中,不写依赖项参数(不是没有依赖的空数组),再运行,一切正常。
constusageRecordData=[{
??name:XXXX,
??content:RunningRecordcRef={childRef}/,
useEffect(()={
??usageRecordData[1].handClick=childRef.current.resizeChart
})
用useImperativeHandle让父组件操纵子组件的状态和方法
useImperativeHandle是react官方为了简便我们的ref操作,同时还可以让子组件返回给父组件自身的状态和方法去调用
useRef将ref绑定到某个子组件标签上,用以获取整个子组件的方法和参数
useImperativeHandle:可以自定义暴露给父组件的方法或者变量
父组件
importReact,{useState,useRef}fromreact
importChildListfrom./ChildList
exportdefault()={
??letparentRef=useRef(null)
??const[name,setName]=useState(li)
??returndiv
????ChildListparentRef={parentRef}name={name}/ChildList
????button()={
??????console.log(parentRef,parentRef)
????}}获取子组件/button
??/div
}
子组件
importReact,{useImperativeHandle,forwardRef}fromreact
exportdefaultforwardRef(
您可能关注的文档
最近下载
- 雷州市卫生健康局下属事业单位招聘考试真题2024.docx VIP
- 第十章 分式(小结与思考)(单元复习课件)-2023-2024学年八年级数学下册同步课堂(苏科版).pptx VIP
- 儿童故事绘本《嘻哈农场-吱咕、吱咕、嘎》.ppt VIP
- BSEN206-2013欧标欧洲规范.pdf VIP
- 2025年山东发展投资控股集团有限公司人员招聘笔试备考试题含答案详解.docx VIP
- 第二届全国健康照护行业职业技能竞赛(健康照护师)理论试题库-下(判断题汇总).docx VIP
- 2025年人工智能训练师(五级)初级资格理论考试练习题库(460题)含答案.docx VIP
- 重庆市西南师大附中高一上学期期末考试(化学).doc VIP
- 一种人工沙滩.pdf VIP
- 广汽丰田C-HR EV_车型手册电子版下载_非汽车用户车主车辆使用操作驾驶说明书.pdf VIP
文档评论(0)