从事前端一段时间了,公司用的框架都是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'));

react 闲谈的更多相关文章

  1. react 闲谈 之 JSX

    jsx元素-> React.createElement -> 虚拟dom对象 -> render方法 1.在react中想将js当作变了引入到jsx中需要使用{} 2.在jsx中,相 ...

  2. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  3. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  4. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  5. React 入门教程

    React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...

  6. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  7. 2017-1-5 天气雨 React 学习笔记

    官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...

  8. RxJS + Redux + React = Amazing!(译二)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...

  9. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

随机推荐

  1. web开发中的Cookie与Session技术

    Cookie Cookie的由来 HTTP协议是无状态的,无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后 ...

  2. python小知识- webbrowser模块 + join()方法

    一.join描述 将序列中的元素以指定的字符连接生成一个新的字符串. 语法 语法: ‘sep’.join(seq) 参数说明: sep:分隔符.可以为空 seq:要连接的元素序列.字符串.元组.字典 ...

  3. 9.Spring整合Hibernate_2_声明式的事务管理(Xml的方式)

    使用xml的方式进行声明式的事务管理 推荐使用xml的方式,因为可以同时为多个方法进行声明 <!-- 开启Spring中的事务管理(声明式的事务管理) xml--> <!-- 不管是 ...

  4. Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)

    G. List Of Integers time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  5. python模块 加密服务hashlib,hmac

    https://docs.python.org/zh-cn/3/library/hashlib.html hashlib --安全hash和消息摘要digest hmac -- keyed-Hashi ...

  6. 统计连接到主机前十的ip地址和连接数

    常用脚本–tcp #!/bin/bash # #******************************************************************** #encodi ...

  7. 【洛谷P2480】古代猪文

    题目大意:求 \[ G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659 \] 题解:卢卡斯定理+中国剩余定理 利用卢卡斯定理求出指数和式对各个素模数的 ...

  8. 小程序分享链接功能 - onShareAppMessage

    onShareAppMessage用法: 只需要在button标签中加入open-type="share",小程序ui就会自动识别分享链接功能 <button data-na ...

  9. Java多线程断点下载文件

    Java实现断点续传+多线程下载 如下代码所示,每一步都有注解 思路: 通过URL连接到服务器上要下载的文件,得到文件的大小: 算出每条线程下载的开始位置和结束位置,例如,有两条线程下载100Byte ...

  10. quartz (从原理到应用)详解篇(转)

    一.Quartz 基本介绍 1.1 Quartz 概述 1.2 Quartz特点 1.3 Quartz 集群配置 二.Quartz 原理及流程 2.1 quartz基本原理 2.2 quartz启动流 ...