• react 闲谈


    从事前端一段时间了,公司用的框架都是vue,但是不知为何对react却情有独钟,这是不是所谓的吃着碗里的看着锅里的 哈哈哈
    从头好好总结下react吧 小白一个 大神勿喷

    瞎说一

    1. react是由两部分组成,react包和react-dom,语法呢都是ES6,那ReactDOM中最常用的方法呢就是render
    2. 那说到react 不得不说一个JSX元素, 此乃何物,这么说 它是JavaScript 与 xml 爱情的结晶 哈哈哈 那么html也是xml的一种 所以 就是javascript + html;JSX 中的html部分和原生的html基本一样,也不完全一样,JSX是一个语法糖 最后通过babel进行转义
      ReactDOM.render的写法
    React.createElement(
      "h1",
      { className: "red" },
      "简直走别拐弯",
      React.createElement(
          "span",
          { id: "handsome" },
          "帅哥"
      )
    )
    
    • 最终会转化成一个对象"虚拟dom" {type:'h1',props:{className:"red",children:[简直走别拐弯,{type:'span',props:{id:'handsome',children:'帅哥'}]}}
    • 1.先将jsx转化成react元素
    • 2.将react元素变成一个对象
    • 3.通过render方法渲染出一个对象

    瞎说二

    1.createElement简单实现

    function createElement (type,props,...children)  {
            if(childern.length === 1){
                return {type,props:{...props,children:children}}
    
        }
    
    }
    // {type:'h1',props:{className:"red",children:[简直走别拐弯,{type:'span',props:{id:'handsome',children:'帅哥'}]}}
    
    
    let myRender = (obj,container) =>{
        let {type,props} = obj;
        let ele = document.createElement(type); // 创建第一层
        for(let key in props){
            if(key === 'children'){
                // children有可能是数组 也可能是一个
                if(typeof props[key] === 'object'){ // 数组 ['姜,',{type:'',props:{}}]
                    props[key].forEach(item=>{
                        if(typeof item === 'object'){ // 如果子元素是对象那就继续调用render
                            myRender(item,ele);
                        }else{
                            ele.appendChild(document.createTextNode(item));
                        }
                    })
                }else{ // 一个的化直接插入到h1中
                    ele.appendChild(document.createTextNode(props[key]));
                }
            }else if(key === 'className'){
                ele.setAttribute('class',props[key]);
            }else{
                ele.setAttribute(key,props[key]);
            }
        }
        container.appendChild(ele);// 将元素插入到页面中
    }; // 将我们自己创建出来的“元素”对象 插入到root中
    myRender(createElement("h1",{className: "red"},"简直走别拐弯,", createElement("span",{id: "handsome"},"帅哥")),document.getElementById('root'));
    
    
    
  • 相关阅读:
    .NET拾忆:FileSystemWatcher 文件监控
    .NET拾忆:EventLog(Windows事件日志监控)
    MSSqlServer 主从同步复制原理(发布/订阅)
    MSSqlServer 发布/订阅配置(主从同步)
    Entity Framework Code First(Mysql)
    .Net拾忆:Asp.net请求管道
    http://blog.csdn.net/dianhuiren/article/details/7543886 该作者对操作系统底层研究较深
    page cache 与 page buffer 转
    linux free命令中buffer与cache的区别
    Nginx重写规则指南 转
  • 原文地址:https://www.cnblogs.com/wzy0526/p/9935678.html
Copyright © 2020-2023  润新知