美文网首页
【学习笔记 】React ③ 虚拟DOM 和ref的使用

【学习笔记 】React ③ 虚拟DOM 和ref的使用

作者: Moombahton | 来源:发表于2019-12-02 21:41 被阅读0次

目录

  • 虚拟DOM
  • ref的使用

虚拟DOM

当组件的state或者props发生改变时,render函数就会重新执行。当父组件的render函数被运行时,它的子组件的render都将被重新运行。

React渲染机制:

1.state 数据
2.JSX模版
3.数据 + 模版结合,生成虚拟DOM.['div', {id: 'abc', ['span', {}, 'hello world']}]

虚拟DOM是一个JS对象

4.用虚拟DOM的结构生成真实的DOM,显示.<div id='abc'><span>hello world</span></div>
5.当state 发生变化后
6.数据 + 模版 生成新的虚拟DOM['div', {id: 'abc', ['span', {}, 'bye-bye']}]
7.比较原始虚拟DOM和新的虚拟DOM的区别,找到区别是span中的内容(Diff算法)
8.直接操作DOM,改变span中的内容

整个过程为:JSX -> React.createElement -> 虚拟DOM (JS 对象 )-> 真实的DOM

引入虚拟DOM的好处:

  • 性能提升,从DOM比对变成了JS比对
  • 它使得跨端应用得以实现。React Native

虚拟DOM中的Diff算法

1.setstate为什么是异步的?


setState异步.png

性能优化,将多次setState合成一次setState,减少虚拟DOM比对。

2.Diff进行同层比对,逐层去比对,如果发现不同,直接替换,其后面的子
层全部废弃。


逐层比对.png

3.为什么做列表循环的时候要引入key值?
提高虚拟DOM比对的性能,但是key值要保持稳定,不要用index做key值

ref的使用

在react中可以使用ref来获取dom元素。

<input
    ref={(input) => {this.input=input}} 
    value={this.state.inputValue}
    onChange={this.handleInputChange}/>

handleInputChange()通过e.target获取input的value值,也可修改为const value = this.input.value

但要注意的是:
当ref和setState一起使用的时候,要把操作dom的语法放在setState的第二个参数的函数里面,因为setState是异步函数。这样就可以保证操作dom的方法是在页面渲染后执行的。

    handleBtnClick () {
        this.setState((prevState) => ({
            list: [...prevState.list, prevState.inputValue],
            inputValue: ''
        }), () => {
            console.log(this.ul.querySelectorAll('div').length)
        })
    }

如果将console.log(this.ul.querySelectorAll('div').length)放在setState后面,就会出现下面的情况,获取到的div总是比实际少一个。

ref的使用.gif

(完)

相关文章

  • 【学习笔记 】React ③ 虚拟DOM 和ref的使用

    目录 虚拟DOM ref的使用 虚拟DOM 当组件的state或者props发生改变时,render函数就会重新执...

  • React学习笔记(三)

    React中的 ref 的使用 ref是一个引用,在React中使用ref来直接获取DOM元素从而操作DOM Re...

  • React 中 ref 的使用

    ref是reference的简写,它是一个引用,在react中,我们使用ref来操作DOM。 在react中,我们...

  • react-ref

    ref:react对真实dom的引用 ref在reactElement上 ref在react组件上

  • React虚拟DOM浅析

    如果您正在使用React或学习React,那么您一定听说过“虚拟DOM”一词。现在什么是虚拟DOM?为什么Reac...

  • 虚拟DOM

    virtual dom (虚拟DOM) 简称 vdom ,它是vue和react的核心。 vdom比较独立,使用也...

  • react生命周期 虚拟dom

    vue和react都使用虚拟dom:通过js构建dom树节点react生命周期:https://zh-hans.r...

  • React中ref的使用

    React中Ref是什么? ref是React提供的用来操纵React组件实例或者DOM元素的接口。 ref的作用...

  • React-ref属性使用

    React为我们提供的这个ref属性,可以打破React对虚拟DOM 的限制;对元素真正实例的引用,也就是渲染视图...

  • ref与DOM-findDomNode-unmountCompo

    课程目标理解react的框架使用中,真实dom存在的意义。 使用真实dom和使用虚拟dom的场景。 灵活掌握并能够...

网友评论

      本文标题:【学习笔记 】React ③ 虚拟DOM 和ref的使用

      本文链接:https://www.haomeiwen.com/subject/qdntgctx.html