• react学习(二)


    一、react虚拟dom-----减少真实dom的创建和虚拟dom的对比,比较js对象不耗性能,但是比较dom是非常耗费性能的。

       1.state数据

       2.jsx模板

       4.数据+模板结合,生成虚拟dom(虚拟dom是一个js对象,用它来描述真实的dom)

          <div id="abc"><div>

          ['div',{id:'abc'}]

    3.,根据虚拟dom生成真实dom,来显示

       5.state发生变化

       6.数据+模板,生成新的虚拟dom(极大提升了性能)

          <div id="abc">hello<div>

          ['div',{id:'abc'},'hello']

       7.比较原始虚拟dom和新的虚拟dom的区别,找到区别

       8.直接操作dom,改变内容

    二、虚拟dom的diff算法

    虚拟dom比对的过程会用到diff算法。

    setstate是异步的,原因在于为提高react底层性能,如果在较短时间有3次setstate变更3组数据,react可以合并为一次setstate,只会做一次虚拟dom,省去其他两次比对。

    一层层对比,要是第一层不一样,就会重新替换掉下一层的dom。

    在循环中,key最好不要是index,因为无法保证新旧虚拟dom的key值是一致的,比如删除掉一个元素。

    三、ref的用法

    尽量少用ref,因为有时和setState连用时更新了数据,但是获取的不正确。可以写在setstate的第二个函数里。

    import React,{Component} from 'react';
    import {CSSTransition} from 'react-transition-group'
    class Test extends Component{
        constructor(props){
            super(props)
            this.state={
                inputValue:''
            }
           this.handleChange=this.handleChange.bind(this)
        }
        render(){
            return (
                <Fragment>
                    <div>
                        <input vulue={this.state.inputValue}
                        onChange={this.handleChange}
                        ref={(input)=>{this.input=input}}
                        ></input>
                    </div>
                    <p>world</p>
                </Fragment>
            )
        }
        handleChange(){
            const value=this.input.value;
            this.setState(()=>{
                inputValue:value
            })
        }
    }
    export default Test;
  • 相关阅读:
    SQL Server中使用convert进行日期转换
    杂记
    sqlserver表分区与调优与行列转换
    HttpModule的认识与深入理解及MVC运行机制
    再谈委托
    ASP.NET forms凭据设置和跳转的几种方法
    IOS学习网址
    Activator.CreateInstance 方法 (Type) 的用法
    update多表更新的2种方式
    SQL自定义函数split分隔字符串
  • 原文地址:https://www.cnblogs.com/bwnnxxx123/p/15811466.html
Copyright © 2020-2023  润新知