Refs

2024-08-24 08:48
文章标签 refs

本文主要是介绍Refs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Refs
    • Refs是什么
    • Refs作用
    • Refs的使用
      • 创建 Refs
        • 1. 使用 React.createRef() 创建 refs
        • 2. 回调形式创建 refs
    • Refs知识点

ReactNative系列-文章

Refs

Refs是什么

Refs 提供一种访问在render方法中DOM节点或者React元素的方式。

Refs作用

你可以通过它获得DOM节点或者React元素。一般用在处理焦点,文本选择,触发动画,触发方法等。例如,有一个CheckBox组件,你可以通过Refs获得该React元素,然后主动触发它的onClick方法:

<TouchableOpacity onPress={()=>{this.cb.onClick();}><CheckBox ref={(c)=>{this.cb = c;}}onClick={()=>{console.log(‘clicked’);}}></CheckBox>
</TouchableOpacity>

Refs的使用

创建 Refs

1. 使用 React.createRef() 创建 refs
class MyComponent extends React.Component {constructor(props) {this.myRef = React.createRef();}render() {return(<div ref={this.myRef}/>)}
}

可以使用current属性,对节点的引用进行访问。

class CustomTextInput extends React.Component {constructor(props) {super(props);// 创建 ref 存储 textInput DOM 元素this.textInput = React.createRef();this.focusTextInput = this.focusTextInput.bind(this);}focusTextInput() {// 直接使用原生 API 使 text 输入框获得焦点// 注意:通过 "current" 取得 DOM 节点this.textInput.current.focus();}render() {// 告诉 React 我们想把 <input> ref 关联到构造器里创建的 `textInput` 上return (<div><inputtype="text"ref={this.textInput} /><inputtype="button"value="Focus the text input"onClick={this.focusTextInput}/></div>);}
}

React 会在组件加载时将 DOM 元素传入 current 属性,在卸载时则会改回 null。ref 的更新会发生在componentDidMount 或 componentDidUpdate 生命周期钩子之前。

2. 回调形式创建 refs
<TouchableOpacity onPress={()=>{this.cb.onClick();}><CheckBox ref={(c)=>{this.cb = c;}}onClick={()=>{console.log(‘clicked’);}}></CheckBox>
</TouchableOpacity>

Refs知识点

  1. 不要过度使用Refs,如果可以通过声明实现,则尽量避免使用refs;
  2. 不能在函数式组件上使用ref属性(就是function定义的组件,不是class),因为它们没有实例;
  3. ref 的更新会发生在componentDidMount 或 componentDidUpdate 生命周期钩子之前。所以不能在组件卸载的时候直接使用ref的react元素,React 会在组件卸载时将ref 改回 null。

这篇关于Refs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102009

相关文章

【解决方案】【最佳实践】React高阶组件中Refs 不会被传递的问题

大家好,我是DX3906。 最近遇到React高阶组件中Refs 不会被传递的问题。 在这里总结一下解决方案和解决思路:主要是通过从内向外和从外向内2种思路来分析解决的。 目录 前言 解决方案一:React.forwardRef 解决方案二:使用props传递ref 结语 前言         虽然高阶组件的约定是将所有 props 传递给被包装组件,但这对于 ref

【vue3中使用$refs】

在使用uniapp官网里的uni-popup弹出层组件时,要将vue2转换成vue3,,这里遇到了一个问题:vue2可以通过this访问到绑定的ref,但是vue3没有了this,应该怎么办呢? 解决方法: !

vue中使用 this.$refs 来获取元素和组件的内容

在标签添加ref属性,然后控制台打印来获取该标签的内容: 页面效果:点击按钮(获取元素内容) 在控制台查看打印内容: 代码展示如下: <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="vie

vue属性介绍(一)ref 与$refs的互生关系

文章目录 场景介绍实例介绍ref在实例中的应用$refs在实例中的应用重要提醒 场景介绍 当我们需要在js中获取某个节点的时候,我们一般会采用什么呢,js中可以是document.getelementById("dom"),jquery中可以是$("#dom"),那么vue中我们可以怎样快速获取指定节点的dom信息呢,我想说的是:ref为你而来。 实例介绍 在介绍实例之前,

Vue3中的常见组件通信之`$refs`、`$parent`

Vue3中的常见组件通信之$refs、$parent 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认插槽、具

删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法

先输入: 在git 命令行终端输入 git fetch -p origin 查看所有分支: git branch -a 然后删除: git push origin -d xxxx   如果报错:git: refusing to delete the current branch 并且当前分支!=删除分支 则时git默认分支==删除分支,导致其一致被占用状态,无法删除,

Vue组件通讯$refs获取组件实例例子

在Vue中,$refs 是一个对象,它持有注册过 ref 特性 (attribute) 的所有 DOM 元素和子组件实例。你可以使用 $refs 在父组件中直接访问子组件的实例或者 DOM 元素。 下面是一个使用 $refs 获取子组件实例的例子: 首先,我们有一个子组件 ChildComponent.vue: vue <template>   <div>     <p>我是子组件</

vue中在mounted使用$refs获取不到DOM元素

vue中在mounted使用$refs获取不到DOM元素 前言解决方案1、通过使用$nextTick来获取2、updated中获取 前言 在使用ref的时候,在mounted中通过$ref获取节点是获取不到报undefined this.$refs.xx 为 undefined 解决方案 在mounted钩子中加载回来的数据不会在这个阶段更新到DOM中 1、

Vue 父组件使用refs来直接访问和修改子组件的属性或调用子组件的方法

步骤 1: 在子组件中定义要被修改的属性或方法 首先,在子组件中定义你想要父组件能够修改或调用的属性或方法。例如,我们有一个名为MyChildComponent的子组件,它有一个名为childData的数据属性和一个名为updateData的方法。 // 子组件 MyChildComponent.vueexport default {data() {return {childData: '初

解决push时,报错error_ failed to push some refs to ‘https___gitee.com_...‘

remote: error: File: 90c5365492dea3b3c855b2375f1de8588ac1bda4 162.65 MB, exceeds 100.00 MB. 原因是上传的文件超过100.00 MB Gitee限制上传的每个文件的大小,不能超过100MB 高于100MB无法上传到Gitee远程仓库,把超过大小的文件添加到Git忽略提交规则(.gitignore文件)里就可以