当前位置: 首页 > news >正文

四、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. 掌握在什么情况下需要真实的dom节点;react的虚拟dom不能实现的原生dom的api的情况,比如:文本框自动聚焦,音频视频相关的api,获取元素的宽高和位置等。基本原则是:能不用真实dom节点尽量不用,实在不能用虚拟dom的时候,才使用真实dom节点。再一种情况是,现有的一些库是针对dom操作而构建的,那么想要把这些库和react结合在一起,就必须要使用真实dom节点,比如swiper betterScroll echarts等等。

授课思路

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

无语非要说我质量差,凑个文字……

相关文章:

  • synchronized关键字
  • StarRocks从入门到精通系列五:导入数据
  • 做了8年前端,细说那些曾经让你浴霸不能的后端
  • 你安全吗?丨秦淮到底是哪种黑客?你猜对了吗?
  • Android App开发中使用Glide加载网络图片讲解及实战(附源码 简单易懂)
  • mysql的监控大屏
  • 【node进阶】深入浅出websocket即时通讯(二)-实现简易的群聊私聊
  • 解决storybook中组件的tailwindcss类不生效问题
  • 零基础学FPGA(六):FPGA时钟架构(Xilinx为例,完整解读)
  • python--敲击木鱼积累功德小项目(更新版(2))
  • 真趣科技:多业务形态的企业需要灵活可配置的CRM系统
  • 力扣206 - 反转链表【校招面试高频考题】
  • 利用宝塔实现百度自动推送
  • 【JavaSE】一起学继承
  • web前端设计与开发期末作品_期末大作业【使用HTML制作汽车首页】
  • 【ASM】字节码操作 工具类与常用类 asm-utils 与 asm-commons
  • MySQL纯代码复习
  • 【浅学Linux】动态库与静态库的封装与使用
  • [ITIL]-ITIL4的服务管理关键概念
  • 第15届台州学院校赛题解