第四单元(ref与DOM-findDomNode-unmountComponentAtNode)

#课程目标

  1. 理解react的框架使用中,真实dom存在的意义。

  2. 使用真实dom和使用虚拟dom的场景。

  3. 灵活掌握并能够合理使用操作真实dom的方法。

#知识点

  1. react中提供了ref这个属性来获取原生的dom节点,使用方式:在虚拟dom中添加ref属性,即可在组件实例的refs属性中获取该真实dom节点。由于组件实例化的时候,真实dom节点是在最后才生成的。所以,我们获取真实dom节点应该是在componentDidMount这个生命周期中。
class HelloWorld extends Component{
render(){
return <div>
<h1 ref="h">hello world</h1>
</div>
}
componentDidMount(){
console.log(this.refs.h); // 打印的是h1这个dom节点。
} }
 
  1. ref也可以使用在组件标签上使用,此时获取的是该组件标签的组件实例。如下:
class Button extends Component{
render(){
return <button>确定</button>
}
}
class HelloWrold extends Component{
getBtnThis = btn => {
console.log(btn) // Button组件的第二个组件实例
}
render(){
return <div>
<Button ref="btn"></Button>
<Button ref={this.getBtnThis}></Button>
</div>
}
componentDidMount(){
console.log(this.refs.btn); // Button组件的第一个组件实例
}
}


  1. findDomNode这个方法可以根据组件实例(每个组件实例都对应的有一段dom节点)获取该组件实例所对应的真实dom节点。该方法的使用如下
/**
context 一个组件的组件实例
dom 该组件实例所对应的真实dom节点。
*/
const dom = React.findDomNode(context);
 
  1. unmountComponentAtNode该方法的作用是:从 DOM 中移除已经挂载的 React 组件,清除相应的事件处理器和 state。如果在 container 内没有组件挂载,这个函数将什么都不做。如果组件成功移除,则返回 true;如果没有组件被移除,则返回 false。
const result = React.unmountComponentAtNode(DOMElement container)
1
  1. 掌握在什么情况下需要真实的dom节点;react的虚拟dom不能实现的原生dom的api的情况,比如:文本框自动聚焦,音频视频相关的api,获取元素的宽高和位置等。基本原则是:能不用真实dom节点尽量不用,实在不能用虚拟dom的时候,才使用真实dom节点。再一种情况是,现有的一些库是针对dom操作而构建的,那么想要把这些库和react结合在一起,就必须要使用真实dom节点,比如swiper betterScroll echarts等等。

#授课思路

#案例和作业

    1. 实现一个音乐播放器,实现播放和暂停功能

react第四单元(ref与DOM-findDomNode-unmountComponentAtNode)的更多相关文章

  1. 前端笔记之React(四)生命周期&Virtual DOM和Diff算法&日历组件开发

    一.React生命周期 一个组件从出生到消亡,在各个阶段React提供给我们调用的接口,就是生命周期. 生命周期这个东西,必须有项目,才知道他们干嘛的. 1.1 Mouting阶段[装载过程] 这个阶 ...

  2. react ref获取dom对象

    react文档 step = React.createRef(); // init <div ref={this.step}></div> // bind componentD ...

  3. React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)

    import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...

  4. 【React自制全家桶】三、React使用ref操作DOM与setState遇到的问题

    在React中同时使用ref操作DOM与setState常常会遇到 比如操作的DOM是setState更新之前的DOM内容,与想要的操作不一致.导致这样的原因是setState函数是异步函数. 就是当 ...

  5. React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定

    1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑 ...

  6. 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定

    接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...

  7. react第十四单元(react路由-react路由的跳转以及路由信息)

    第十四单元(react路由-react路由的跳转以及路由信息) #课程目标 理解前端单页面应用与多页面应用的优缺点 理解react路由是前端单页面应用的核心 会使用react路由配置前端单页面应用框架 ...

  8. linux基础-第十四单元 Linux网络原理及基础设置

    第十四单元 Linux网络原理及基础设置 三种网卡模式图 使用ifconfig命令来维护网络 ifconfig命令的功能 ifconfig命令的用法举例 使用ifup和ifdown命令启动和停止网卡 ...

  9. vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)

    第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ...

随机推荐

  1. 关于Redis的一些思考

    1.从Java语言考虑,已经有ConcurrentHashMap等并发集合类了,与Redis相比,区别于差异在哪? 一直有这么个疑问,今天有搜了很久,很巧,搜到个有同样想法的问答,如下: When p ...

  2. HMM、CTC、RNN-T训练是所有alignment的寻找方法

    1.1 LAS产生label的计算   LAS是可以看做能够直接计算给定一段acoustic feature时输出token sequences的概率,即\(p(Y|X)\),LAS每次给定一个aco ...

  3. python selenium 时间搜索框查询和日期大小比较

    在做selenium自动化的时候遇到 时间搜索框查询(如下图)并比较查询结果是否在输入的时间之类. 首先,第一步要做的就是选择时间,并获取到所选时间的文本信息 如上图所示,获取到的时间搜索框并没有文本 ...

  4. python计算时间差

    前言 之前写代码都是看打印的初始和结束时间然后自己算间隔时间,感觉总是不方便,这不符合python的优雅简洁,于是去寻找简便之道. 方法 time模块计算时间差 import time s_time ...

  5. Matlab 画图2

    fplot函数 plot函数的缺点:在实际应用中,函数随着自变量的变化趋势是未知的,如果自变量的离散区间不合理,则无法反应函数的变化趋势. fplot的作用:通过自适应算法,解决上述问题. fplot ...

  6. java集合类(新手也能掌握)

    文章目录 1.集合概述 (1)集合: (2)集合分类: 2.Collection接口 3.List接口 (1)List接口简介 (2)ArrayList集合 (3)LinkedList集合 (4)It ...

  7. 第11.7节 Python正则表达式的字符串结尾匹配模式及元字符“$”功能介绍

    符号"$"表示匹配字符串的结尾,即字符串的结尾满足匹配模式的要求. 在 MULTILINE 模式(搜索标记中包含re.MULTILINE,关于搜索标记的含义请见<第11.2节 ...

  8. SSH无密码登陆

    http://blog.chinaunix.net/uid-26284395-id-2949145.html

  9. LeetCode初级算法之数组:1 两数之和

    两数之和 题目地址:https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整 ...

  10. .NET 内存泄漏的争议

    前几天发布了几篇关于要小心使用 Task.Run 的文章,看了博客园的所有评论.发现有不少人在纠结示例中的现象是不是属于内存泄漏,本文分享一下我个人的看法,大家可以保留自己的意见. 在阅读本文前,如果 ...