react里面怎样获取refs

react里面怎样获取refs,第1张

eact refs 可以接受一个字符串对象吗 处理 React 组件之间的交流方式,主要取决于组件之间的关系,然而这些关系的约定人就是你。我不会讲太多关于 data-stores、data-adapters 或者 data-helpers 之类的话题。我下面只专注于 React 组件本身的

在项目过程中,有些元素的 ref 是通过循环生成的,例如。

这里我们内部的div通过循环绑定了一个座位号的 ref ,如果我们直接去通过 $refs 去获取 consolelog(this$refsid) ,这个传入的值会被当成字符串解析,那么获取就会失败。

ref 目前使用过的三种方式:

1、在html的元素中使用rel,可在js中直接调用该元素,用this$refs(ref值) 获取到的是dom元素

2、在vue的组件上加rel,可在js中直接使用该组件包括该组件的方法,用this$refs(ref值)方法名()

3、在v-for的循环列中使用rel

避坑:

v-for中使用rel需要绑定 变量 ,即v-bind:rel='变量名'

ref 需要在dom渲染完成后才会有 ,在使用的时候确保dom已经渲染完成。比如在生命周期  mounted(){} 钩子中调用 ,或者 在 this$nextTick(()=>{}) 中调用 。

如果rel循环未绑定变量,那就$refs获取获取数组再循环得到使用即可

例子1:在html元素上使用

<div id="app">

    <h1 ref="h1ele">这是h1</h1>

    <hello ref="ho"></hello>

    <button @click="getref">获取h1元素</button>

</div>

获取注册过 ref 的所有组件或元素

methods: {

        getref() {

          // 表示从 $refs对象 中, 获取 ref 属性值为: h1ele DOM元素

          consolelog(this$refsh1eleinnerText);

          this$refsh1elestylecolor = 'red';// 修改html样式

          consolelog(this$refshomsg);// 获取组件数据

          consolelog(this$refshotest);// 获取组件的方法

        }

      }

例子2:

<html部分

<view class="example-body">

<button class="button" type="primary" @click="togglePopup('top', 'popup')">顶部d出 popup</button>

<button class="button" type="primary" @click="togglePopup('center', 'popup')">中间d出 popup</button>

<button class="button" type="primary" @click="togglePopup('bottom', 'popup')">底部d出 popup</button>

</view>

<uni-popup ref="showpopup" :type="type" @change="change"><text class="popup-content">{{ content }}</text></uni-popup>

<uni-popup ref="showtip" :type="type" :mask-click="false" @change="change">

<view class="uni-tip">

<text class="uni-tip-title">警告</text>

<text class="uni-tip-content">这是一个通过自定义 popup,自由扩展的 警告d窗。点击遮罩不会关闭d窗。</text>

<view class="uni-tip-group-button">

<text class="uni-tip-button" @click="cancel('tip')">取消</text>

<text class="uni-tip-button" @click="cancel('tip')">确定</text>

</view>

</view>

</uni-popup>

<js部分

methods: {

togglePopup(type, open) {

switch (type) {

case 'top':

thiscontent = '顶部d出 popup'

break

case 'bottom':

thiscontent = '底部d出 popup'

break

case 'center':

thiscontent = '居中d出 popup'

break

}

thistype = type

this$nextTick(() => {

this$refs['show' + open]open()

})

},

cancel(type) {

this$refs['show' + type]close()

},

change(e) {

consolelog('是否打开:' + eshow)

}

},

一般来讲获取DOM元素,需documentquerySelector("class")获取这个dom节点,然后在获取元素的值。

但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的元素上绑定rel,然后$refs里面调用就行。

然后在javascript里面这样调用:this$refs元素绑定rel  这样就可以减少获取dom节点的消耗了

看Vuejs文档中的ref部分,自己总结了下ref的使用方法以便后面查阅。

HTML 部分

js部分

HTML部分

JS部分

HTML部分

JS部分

HTML部分

JS部分

1、如果通过v-for 遍历想加不同的ref时记得加 : 号,即 :ref =某变量 ;

这点和其他属性一样,如果是固定值就不需要加 : 号,如果是变量记得加 : 号

2、通过 :ref =某变量 添加ref(即加了 : 号) ,如果想获取该ref时需要加 [0] ,如 this$refs[refsArrayItem] [0] ;如果不是 :ref =某变量 的方式而是 ref =某字符串 时则不需要加,如 this$refs[refsArrayItem]

3、想在element ui 对话框打开后取dom时,应该使用 $nextTick ,而不是直接使用 this$refs imgLocal2 :

之前在公司做项目,一直感觉用ref来定位dom节点挺方便的。但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this$refsxxx,打印出来的却是undefined?

DOM结构已经渲染出来了,但是如果在DOM结构中的某个DOM节点使用了v-if、v-show或者v-for(即根据获得的后台数据来动态 *** 作DOM,即响应式),那么这些DOM是不会再mounted阶段找到的。

所以如果在mounted钩子中使用$refs,如果ref是定位在有v-if、v-for、v-show中的DOM节点,这些判断下的DOM还没渲染,返回来的只能是undefined,因为在mounted阶段他们根本不存在!!!

如果说mounted阶段是加载阶段,那么updated阶段则是完成了数据更新到DOM的阶段(对加载回来的数据进行处理),此时,ref、数据等等全部都挂载到DOM结构上去,在update阶段使用this$refsxxx,就100%能找到该DOM节点。

updated与mounted不同的是,在每一次的DOM结构更新,vue都会调用一次updated(){}钩子函数!而mounted仅仅渲染完成时只执行一次而已。

简单来说,只要在调试的时候,能看到元素的存在,在updated阶段都可以使用this$refsxxx找到对应的DOM节点!

ref官宣:

以上就是关于react里面怎样获取refs全部的内容,包括:react里面怎样获取refs、$refs通过模板字符串动态获取、vue中$refs的使用记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9287585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存