React

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > React > React底层

浅谈React底层实现原理

作者:杉菜酱_

本文主要介绍了浅谈React底层实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. props,state与render函数关系,数据和页面如何实现互相联动?

当组件的state或者props发生改变的时候,自己的render函数就会重新执行。
注意:当父组件的render被执行的时候,子组件的render也会被重新执行一次(因为在父组件的render里面)。
即当绑定的事件改变了state或者props,render函数就会重新执行解析页面,这时解析的时候就会使用新的数据了,所以页面就会变化。

2. React中的虚拟DOM

因为只要state、props改变就会重新渲染render,可以想象要不断的重新渲染页面对性能要求非常高,实际上render的性能时非常高的,这归功于虚拟DOM。
首先提前明确DOM的相关操作需要调用web application对性能损耗是比较高的。

常规思路

改良思路(仍使用DOM)

React的思路

深入理解虚拟DOM

Vue与React中的虚拟DOM的原理和步骤是完全一致的。
React中真实DOM的生成步骤:JSX -> createElement方法 -> JS对象(虚拟DOM) -> 真实的DOM。
因此可见,JSX中的div等标签仅仅是JSX的语法,并不是DOM,仅用于生成JS对象。
其实在React中创建虚拟DOM(JS对象)使用的是(没有JSX语法也可用下面的方法生成)

// 传三个参数:标签 属性 内容
// <div>item</div>
// 所以其实没有JSX语法也可以用下面的方式生成
React.createElement('div',{},'item')

虚拟DOM的优点:

3. 虚拟DOM的diff算法

4. React中ref的使用

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

handleInputChange(e){
    // const value = e.target.value; // 原始的方法
    const value = this.input.value;
    this.setState(() => ({
        inputValue: value
    }))
}

一般情况下不推荐使用ref这种方法,因为setState是一个异步函数,因此去操作DOM的时候可能无法正确的输出页面的最新DOM情况,有时候比较复杂的操作如动画之类的,如果一定要使用,就需要在setState的第二个函数,这个是回调函数,在setState完成的时候触发。

handleBtnClick(e){
    this.setState((prevState)=>({
        list: [...prevState.list, prevState.inputValue], // 展开运算符
        inputValue: '',
    }), ()=>{
        console.log(this.ul.querySelectorAll('div').length);
    });
}

5. React中的生命周期函数

组件挂载的过程:

6. 生命周期函数的使用场景

到此这篇关于浅谈React底层实现原理的文章就介绍到这了,更多相关React底层内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文