• 四、ref与DOM-findDomNode-unmountComponentAtNode


    目标

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

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

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

    知识点

    1. react中提供了ref这个属性来获取原生的dom节点,使用方式:在虚拟dom中添加ref属性,即可在组件实例的refs属性中获取该真实dom节点。由于组件实例化的时候,真实dom节点是在最后才生成的。所以,我们获取真实dom节点应该是在componentDidMount这个生命周期中。
    1. class HelloWorld extends Component{
    2. render(){
    3. return <div>
    4. <h1 ref="h">hello world</h1>
    5. </div>
    6. }
    7. componentDidMount(){
    8. console.log(this.refs.h); // 打印的是h1这个dom节点。
    9. }
    10. }

    1. ref也可以使用在组件标签上使用,此时获取的是该组件标签的组件实例。如下:
    1. class Button extends Component{
    2. render(){
    3. return <button>确定</button>
    4. }
    5. }
    6. class HelloWrold extends Component{
    7. getBtnThis = btn => {
    8. console.log(btn) // Button组件的第二个组件实例
    9. }
    10. render(){
    11. return <div>
    12. <Button ref="btn"></Button>
    13. <Button ref={this.getBtnThis}></Button>
    14. </div>
    15. }
    16. componentDidMount(){
    17. console.log(this.refs.btn); // Button组件的第一个组件实例
    18. }
    19. }

    1. findDomNode这个方法可以根据组件实例(每个组件实例都对应的有一段dom节点)获取该组件实例所对应的真实dom节点。该方法的使用如下
    1. /**
    2. context 一个组件的组件实例
    3. dom 该组件实例所对应的真实dom节点。
    4. */
    5. 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等等。

    授课思路

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

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

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

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

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

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

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

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

  • 相关阅读:
    nodejs连接oracle批量更新数据测试
    Spring Cloud Alibaba、Spring Cloud、Spring Boot依赖版本对照表
    hub.docker访问不了的问题(一步解决)
    [python]使用标准库logging实现多进程安全的日志模块
    OpenCV自学笔记二十二:绘图及交互
    原型(克隆)模式
    【环境配置】基于Docker配置Chisel-Bootcamp环境
    vue3+vite配置eslint&prettier
    设计模式 - 行为型考点模式:责任链模式(概述 | 案例实现 | 优缺点 | 使用场景)
    安装kibana
  • 原文地址:https://blog.csdn.net/weixin_45311714/article/details/127889518