React原理

一.setState()方法说明:更新数据是异步的。

注意:1.使用setState()时,后面再使用setState()不依赖前面的setState()。

           2.setState()方法多次调用,指挥触发一次render().

推荐语法:

        this.setState((state,props)=>{     //其中state和props是最新的state和props

                return{ count:state.count+1}

        }

上面的这种setState(),参数是箭头函数的形式,更新数据也是异步的,但是第一次调用的结果(state,props)会传给第二次调用。

this.setState((state,props)=>{

},()=>{

        console.log('这是setState这种调用形式的第二个参数,这个回调函数会再状态更新后调用)

      })

二.JSX语法的转换过程

JSX仅是createElement()方法的一个语法糖(简化语法)。

JSX语法:

const element={

        <div className="greeting>

                Hello JSX

        </div>

}

createElement()方法:

const element = React.createElement('h1',{className:'greeting'},'Hello JSX'}

JSX语法被@babel/preset-react插件编译为createElement()方法。

三.组件更新机制:

过程:父组件最新渲染,也会重新渲染组件,但只会渲染当前组建的子组件。

四.组件性能优化:

1.减轻state:只存储组件u雪纳瑞相关的数据。

class Hello extend React.component{

        componentDidMount(){

                this.timerId=setInterval(()=>{  },2000)          //timerId存储再this中,而不是state中

        }

        componentWillUnmount(){

                clearInterval(this.timerId)

        }

}                (state存储的数据越多,组件的性能越差)

2.避免不必要的重新渲染

解决方法:使用钩子函数shouldComponentUpdate(nextProps,nextState),这个钩子函数在组件重新渲染之前触发。

shouldComponentUpdate(nextProps,nextState){

        console.log('最新的State',nextState)

        return ture //返回true重新渲染,返回false不重新渲染

}

作用:通过nextState和this,state是否相等,判断是否更新。

3.纯组件:PureCompoenent与React.Component功能相似。

区别:PureComponent内部实现了shouldComponentUpdate钩子函数,不要手动比较。

原理:纯组件内部通过分别对比之前的state和props的值,来决定是否渲染组件。

纯组件内部的对比是shallow compare(浅层对比):

        对应值类型:没有问题。

        对应应用类型来说:需要采用创建新对象方法,对应数组采用创建新数组的方法。

                const newObj= {...this.state.obj,number:math.floor(Math.renadom()*3}

                this.setState(()=>{

                        return { obj:newObj}

                })

 

五.虚拟DOM和Diff算法

虚拟DOM:本质就是一个JS对象,用来描述你希望在屏幕上看到的内容。

执行过程:

        1.初次渲染时,React会根据初始state,创建一个虚拟的DOM对象。

        2.根据虚拟DOM生成真正的DOM,渲染到页面。

        3.当数据变化后(setState()),重新根据新的数据,创建新的虚拟DOM对象。

        4.与上次得到的虚拟DOM对象,使用Diff算法对比,得到需要的新内容。

        5.最终,React只将变化的内容更新DOM中,重新渲染页面。

Vue-React组件库的实现原理主要是通过将Vue组件转化为React组件,或将React组件转化为Vue组件,从而实现在Vue和React项目中同时使用的目的。 具体来说,Vue-React组件库的实现原理有以下几种方式: 1. 使用Vue-React转换器:Vue-React转换器是一个将Vue组件转换为React组件的工具,可以实现在React项目中使用Vue组件。转换器的实现原理是将Vue组件的模板转换为React组件的JSX语法,再在React项目中引入转换后的React组件。这种方式需要注意Vue组件的语法和React组件的语法差异,以及转换器的兼容性和性能问题。 2. 使用Vue-React组件库:Vue-React组件库是一个同时支持Vue和React的UI组件库,可以直接在Vue和React项目中使用。组件库的实现原理是针对Vue和React两种框架分别提供了组件的实现,通过封装和兼容处理,实现在两种框架中的使用。这种方式需要注意组件的兼容性和性能问题,以及组件库的选择和使用方法。 3. 使用Web Components:Web Components是一种通用的组件规范,可以在各种前端框架中使用。Vue和React都支持Web Components规范,因此可以使用Web Components实现在两种框架中共享组件。这种方式需要注意组件的规范和兼容性问题,以及Web Components的使用方法和浏览器支持情况。 需要注意的是,使用Vue-React组件库的方式相对简单,而且在实现原理上比较清晰,因此在实际开发中比较常用。但是,不同的Vue-React组件库实现方式略有不同,需要根据具体组件库的文档进行使用和配置。同时,也需要注意不同框架之间的差异和兼容性问题,避免出现不可预期的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值