24 React.createRef()用法细节分析

  • 通过React.createRef → ref对象
  • 通过元素的ref属性可以附加到React元素上
  • 一般通过构造器中给this的属性赋值一个ref,方便整个组件使用
  • ref只要传递到react元素中,就可以利用ref的current属性访问到该真实DOM节点
  • ref在componentDidMount和componentDidUpdate触发前更新

current里是null的现象

  • 由于打印时,this.modalRef才刚刚声明,current是null,但是current是个引用值,展开时访问的是最后的结果
class Modal extends React.Component {constructor(props) {super(props)this.modalRef = React.createRef()console.log('刚创建时', this.modalRef)}componentDidMount() {console.log('componentDidMount', this.modalRef)}componentDidUpdate() {console.log('componentDidUpdate', this.modalRef)}render() {return (<divref={this.modalRef}style={{width: '300px',border: '1px solid #000',display: this.props.toOpen ? 'block' : 'none'}}><h1>This is a Modal</h1><p>This is a super Modal</p></div>)}
}

在这里插入图片描述

ref有不同的使用方式

  • ref放在html元素上 → current: 真实DOM
  • ref放在class组价上 → current: 组件实例
  • ref放在函数组件(没有实例)→ 无法附加到组件上
class App extends React.Component {constructor(props) {super(props)this.refInApp = React.createRef()}state = {toOpen: false,}componentDidMount() {console.log('【APP】componentDidMount', this.refInApp)}changeStatus = (toOpen) => {this.setState({toOpen})}render() {return (<><Modal toOpen={this.state.toOpen} ref={this.refInApp} /><button onClick={() => this.changeStatus(true)}>打开</button><button onClick={() => this.changeStatus(false)}>关闭</button></>)}
}

在这里插入图片描述

函数组件使用hooks获取dom实例

function Test() {const divRef = React.useRef(null)React.useEffect(() => {console.log('函数组件使用hooks获取ref', divRef)}, [])return (<div ref={divRef}>Test函数组件</div>)
}

在这里插入图片描述

  • 若试图在函数组价上传ref属性会告警
<Test ref={this.refInApp} />

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对于下一代互联网的畅想

去中心化 每台客户机都将成为服务器, 争取对资源的充分利用 显示屏化 运算功能交给云服务器, 每台客户机的主要任务是显示 交互 联网而不是进行运算, 争取对资源的尽可能节省 优点 可以大大降低客户机的成本, 减少资源的浪费, 而且使客户机之间的区别变得更小(因为都主要负责显…

npm install mysql --save-dev

npm install X: 会把X包安装到node_modules目录中不会修改package.json之后运行npm install命令时&#xff0c;不会自动安装Xnpm install X –save: 会把X包安装到node_modules目录中 会在package.json的dependencies属性下添加X 之后运行npm install命令时&#xff0c;会自动…

dart --- 环境配置

1.进入官网下载SDK http://www.gekorm.com/dart-windows/ 2.运行下载的EXE文件.下一步下一步… 3.打开小黑框,输入: dart --version VSCode关于Dart的插件: DartCode Runner 插件安装好后,需重启VSCode. 新建 index.dart,输入以下代码 main () {print("Hello Dart…

Shiro 登录、退出、校验是否登录涉及到的Session和Cookie

前提 我们的使用的是DefaultWebSessionManager而不是ServletContainerSessionManager。这就意味着前者的session为Shiro的&#xff0c;后者的session为Tomcat的。 登录 DefaultWebSessionManager调用start()方法(在AbstractNativeSessionManager中)创建Session&#xff08;Simp…

25 Refs转发机制与在高阶组件中的使用

将子节点的ref暴露给父节点 16.3以上 Refs转发&#xff0c;将ref自动通过组件传递给子组件 1. 在父组件创建ref对象 2. 给子组件赋值ref 3. 通过React.forward向子组件转发ref属性 4. 父组件的ref对象指向子组件dom 5. ref参数只有在 React.forwardRef 组件内定义时可接受con…

26 JSX深度剖析与使用技巧

React对JSX的处理 React.createElement有三个参数&#xff1a;标签类型&#xff0c;属性集合&#xff0c;子元素 JSX其实是React.createElement函数调用的语法糖 JSX → 编译 → React.createElement调用形式 class App extends React.Component {render() {return (<div cl…

javascript --- 数组实用小技巧

一个数组:[a,b,c,d,e],希望满足以下2个条件: 1.当索引在第0个位置的时候,数组为[b,c,d,e],在第1个位置的时候,数组为[a,c,d,e] … 2.若索引i 和 索引 j 的值相等,则只执行1次. 效果如下: nums [1,2,3,4] nums [1,1,1,2,2,3,4] 实现如下: let nums [1,1,1,2,2,3,4]; let le…

Http的持久连接和管线化

【要点】 1. 什么是持久连接&#xff1f; 2. 什么是管线化&#xff1f; 【总结】 1.什么是持久连接&#xff1f; (keep alive模式) HTTP1.1规定了默认保持长连接&#xff08;HTTP persistent connection &#xff0c;也有翻译为持久连接&#xff09;;数据传输完成了保持TCP连接…

Hexo 版本

Mac hexo s 启动Hexo服务报错如下&#xff1a; Error: The module /usr/local/lib/node_modules/hexo-cli/node_modules/.0.8.0dtrace-provider/build/Release/DTraceProviderBindings.node was compiled against a different Node.js version using NODE_MODULE_VERSION 48. T…

dart --- 简单的闭包

首先得明白下面2点: 全局变量的特点:常驻内存,污染全局变量局部变量的特点:会被垃圾回收机制回收,不会污染作用域… // 闭包.dart void main(){myClosure(){var a 0; // a是一个局部变量.函数执行完毕后将被清理return (){a;print(a);};}var fn myClosure();fn();fn();fn()…

27 JSX函数子元素的应用与思考

JSX的props.children和props本身有部分一致的特性 props.children可以传递任何类型的子元素 // 调用子元素回调 num 次&#xff0c;来重复生成组件 function Repeat(props) {// 返回一组JSXlet items [];for (let i 0; i < props.num; i) {items.push(props.children(i));…

Python学习day12(生成器,列表/生成器推导式)

Python学习day12(生成器&#xff0c;列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种&#xff1a;一种是调用方法直接返回的&#xff0c;一种是可迭代对象通过执行iter方法得到的&#xff0c;迭代器有的好处是可以节省内存。 如果在某些情况下&#xff0c;我们也…

Cascader 级联选择器

当一个数据集合有清晰的层级结构时&#xff0c;可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。 通过expand-trigger可以定义展开子级菜单的触发方式。 本例还展示了change事件&#…

es6 --- String.prototype.padStart

从实际出发理解. 首先看下面代码 // js var dt new Date(); console.log(dt);下面想把时间格式化,写一个dateFormat函数 // js function dateFormat(data){var dt new Date(data);var y dt.getFullYear();var m dt. getMonth() 1;var d dt.getDate();var hh dt.getHo…

1 redux初探、用react开发数值增值案例

含义 Redux是专门用作状态管理的js库&#xff0c;不是react插件库可以用在react、angular、vue等项目中能集中式管理react应用中多个组件共享的状态 使用 npx create-react-app redux1 cnpm install redux -S关键字 storereduceractionsubscribe 案例 1. 创建store、并传…

Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)

Python学习笔记_1_基础_2&#xff1a;数据运算、bytes数据类型、.pyc文件&#xff08;什么鬼&#xff09; 一、数据运算 Python数据运算感觉和C&#xff0c;Java没有太大的差异&#xff0c;百度一大堆&#xff0c;这里就不想写了。比较有意思的是三元运算&#xff0c;记得C和Ja…

LeetCode 8. String to Integer (atoi)

问题链接 LeetCode 8. String to Integer (atoi) 题目解析 字符串转换成数字。 解题思路 个人认为题目并没有完全讲清楚题意。最初以为需要考虑多种情况&#xff0c;小数啊指数啊什么的&#xff0c;后面发现不是这样的&#xff0c;这题只要关注字符数字问题以及范围问题。 1.跳…

javascript --- 实战中体会jsonp

准备:1.需要node环境,node环境配置 -> 百度搜索 “node环境配置” (网上太多了) node是否安装成功指令如下: 创建如下页面结构: html结构如下: // jsonp.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…

2 中间件的使用、异步action的创建

react-redux是react插件 将所有组件分成两大类&#xff1a;UI组件和容器组件 安装npm install react-redux -S UI组件&#xff1a; 只负责UI的呈现&#xff0c;不带有任何业务逻辑不使用this.state所有数据都由this.props提供不使用任何Redux的API&#xff0c;不需要使用store …

PHP数组函数

整理了一份PHP开发中数组操作大全&#xff0c;包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数等。 一、数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名ar…