验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

vue3中ref绑定dom或组件失败的原因是什么及怎么解决

阅读:1157 来源:乙速云 作者:代码code

vue3中ref绑定dom或组件失败的原因是什么及怎么解决

      vue3 ref绑定dom或者组件失败原因分析

      场景描述

      在vue3中经常用到使用ref绑定组件或者dom元素的情况,很多时候,明明使用ref绑定了相关组件,但是经常ref绑定失败的情况。

      ref绑定失败情况举例

      ref绑定失败的绝大多数情况是,在ref和组件绑定的时候,该组件还未渲染,所以绑定失败。

      或者组件刚开始未渲染,ref未绑定,当组件开始渲染,ref也开始绑定,但是ref和组件并未绑定完成,这个时候使用组件相关的方法就会出现问题。

      • ref绑定的组件使用了v-if,或者他的父组件使用了v-if导致页面开始渲染的时候,这些组件并没有渲染,所以绑定失败。

      • element-plus中有很多 dialog弹窗等组件,这些组件开始是隐藏的,只有用户点击了按钮才展示,所以很多时候是在用户点击按钮的时候,ref才开始和组件绑定,这个时候绑定还未完成,我们通过ref的变量使用组件的方法,就会出现Uncaught TypeError: Cannot read properties of null (reading 'setCheckedNodes')的错误

      vue3中ref绑定dom或组件失败的原因是什么及怎么解决

      解决方案

      使用vue3的nextTick方法,让调用ref组件方法的逻辑放到下一个时间片执行即可。(推荐

      function addFilterPropertyRule(row) {
      
          let ruleParamObj = JSON.parse(row.hardwareParam)
          if (ruleParamObj) {
              makePropertityTree(ruleParamObj, treeData)
          }
          addOrEditRuleVisible.value = true
          currentRuleItem = row
          if (row.ruleJson) {
              nextTick(() => {
                  treeRef.value.setCheckedNodes(JSON.parse(row.ruleJson), false)
              })
          }
      }

      使用一个延时定时器,让调用ref组件方法的逻辑等一会再执行。(不推荐) 

      vue3组合式API的v-for及ref绑定DOM

      组合式 API 模板引用在 v-for 内部使用时没有特殊处理。需要绑定函数自定义处理。

      
       
      
      • Ref

      
       
      
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>