2020/02/13 01-虚拟DOM和JSX

react是13年facebook开源的东西,后台的分离有一个叫MVC,前台代码就是浏览器要跑的,比如JS代码,做了一个前端的MVC框架
facebook自己来写了js框架,用来架设instagram,然后开源出来了。
然后阿里蚂蚁金服提供了很多前端控件,react是解决的前端mvc框架是view视图层的问题

在这里插入图片描述
创新的提出了虚拟的DOM,DOM(文档对象模型document object model)浏览器最核心的,就是渲染引擎和js引擎,外壳不重要

渲染引擎除了要解决整个html要对应成相应的一些格式或者布局,要解决这个问题以外,还必须提供一种操作接口,为了显示网页,要想办法把网页结构解开,变成一种真正的结构,就得到一种树形结构

左边是一个很简单的html,p标签是做段落分段的,如何来解析,不解析无法做渲染,渲染引擎首先想办法解开了,这是一种树形结构
在这里插入图片描述
解析成以document为跟,html为相当于是整个网页的根节点,text文本结点是一个回车换行符\r\n,html和body之间实际上是有换行符的,这些空白字符其实就是文本节点。
再往下碰到的第一个结点就是body,往下到/body结束,body标签,有开始有结束标识一个范围,这里面有一些text文本标签空白字符,剩下的比如h1标签,p标签,内部还有文本

在这里插入图片描述
也就是说h1的兄弟可能是文本节点
在这里插入图片描述
这就形成了一个树形结构,标准的html可以解析成属性结构

在这里插入图片描述
document其实是操作的起始
在这里插入图片描述
这两个后面都有空白字符,因为html内部包了一个换行符
在这里插入图片描述
h1外面也有换行符

在这里插入图片描述
这样在内存中会形成一个树形结构,就可以来操作,给的操作接口其实就是DOM的操作接口,如何操作就用JS,提供一个document对象,找到这些节点进行操作
在这里插入图片描述
可以在树立面进行增加删除或者修改
在这里插入图片描述
浏览器必须对DOM进行支持,用户可以用js调用DOM接口来修改DOM树节点,从而修改整个网页

在这里插入图片描述
比如创建用户,输入的时候,还没提交网页,已经提示用户已经注册,其实就是js调用,写的内容用事件触发,到后台询问这个用户名是否存在,这个用户已经存在就会动态添加到网页节点里,如果ok,网页就会立马渲染,做部分调整,然后显示出来,只要是dom中出现了某个结点,某个结点下面发生了变化,这个节点所对应的部分就需要做渲染,要重绘

dom树重绘的代价太高,每个节点变了以后就要重新渲染一次,这个实际上是影响了前端的感受,facebook团队考虑到了这一点,所以在操作的时候并没有直接操作dom,用react的时候实际上并不直接操作dom,而是在内存中构建出了一个数据对象,这个对象叫virtual dom,虚拟dom来替代原有的dom,所有的操作都在虚拟的dom上操作,操作完,会把虚拟dom的变化放到dom上去,哪里差异就哪里渲染,减少了不避免的渲染。
在虚拟dom上,如果操作了很多次,发现操作还是回到了原始,虚拟dom发现两次比较一样,就没必要渲染了,发现一样,就不会通知dom了,现在的前端框架很多都采取了虚拟dom的方式,可以提高用户整体的感受

在这里插入图片描述
jsx是一种js和xml混写的方式,不需要再调用原始的create element创造这些节点,只需要把html标记按照一定的格式写进去就行,大大提高写的效率
在这里插入图片描述
这是要渲染的东西,是一个节点
在这里插入图片描述
通过document对象,在整个dom树中找元素,通过元素的ID去找,(元素ID是example)
在这里插入图片描述
dom树里面的东西一般称为节点,也称为element元素,也称为节点node
在这里插入图片描述
找到example元素后,找到dom树下把这些节点加进去
在这里插入图片描述
在这里插入图片描述
这个是通过webpack打包起来的,打包后从服务器端下载到浏览器端
在这里插入图片描述
而浏览器端右键显示源代码只会看到这个,也就是爬虫只会爬这些内容,需要其他方式来爬
在这里插入图片描述
要看bundle.js就要看入口文件指向的是src里的index
在这里插入图片描述
不加大括号说明是缺省导入
在这里插入图片描述
缺省导入的名字可以随意改
在这里插入图片描述
继承react父类,父类显示空空荡荡,你要显示就是很大差异的,就需要一个渲染函数,这种写法可以理解为是js和xml混合的写法
这就是JSX,这就是创建了一个组件
在这里插入图片描述
借助react-dom来操作dom树无非是在dom树里进行渲染
在这里插入图片描述
这个网页有id叫newroot,既然叫id,那么在网页中就是唯一的,每个标签之上都可以定义id
在这里插入图片描述
可以把渲染的东西直接放下来,
在这里插入图片描述
放下来之后就可以注释掉,这里只不过用JSX语法
在这里插入图片描述
右键bash
在这里插入图片描述
启动一下

在这里插入图片描述
在这里插入图片描述
实际上写这个东西不是当做html理解的,当成jsx组件来理解,这个组件实际上继承react组件类的,这个类型必须在渲染函数中return一个对象出来,就可以交给这里进行渲染

在这里插入图片描述
渲染到哪里去,就需要网页中给它留个地方,如何找到,就可以使用getElementById
在这里插入图片描述
id在本网页内应该保证唯一的,不唯一只找第一个
在这里插入图片描述在这里插入图片描述
要换掉现在就这么写,记得封口
在这里插入图片描述
这样就可以了
在这里插入图片描述
这个地方要求一个元素,要求是JSX组件
在这里插入图片描述
就相当于把这个组件放进去,这个组件支持像html的写法<ROOT/ >
在这里插入图片描述
只要保存就会不端编译,因为HMR热模块替换,自动刷新 在这里插入图片描述
在这里插入图片描述
可以用create系列的方法来创建一个dom
在这里插入图片描述
用这种方法创建
在这里插入图片描述
如果嵌套很多,用这种方式创建非常麻烦,所以这种方法基本被人遗忘了,现在都用JSX在这里插入图片描述
组件必须从react.component继承
在这里插入图片描述
行数多建议括起来
在这里插入图片描述
在这里插入图片描述
查看元素,newroot是插入点
在这里插入图片描述
div插入到newroot里去,下面subelemt,两边的嵌套关系是一致的,这种方式更加直观
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
必须封口,即使是单标签也需要封口,否则报错
在这里插入图片描述
可以直接斜杠,单标签就这么写
在这里插入图片描述
不加内容要封口就这么封

在这里插入图片描述
JSX语法要求关闭
在这里插入图片描述
有些错误会在这里提示,不会生成新的bundle.js,浏览器就不会刷新

在这里插入图片描述
这种网页就称为SPA,single,page,application,单页应用,普通爬虫爬没用
在这里插入图片描述
这地方看的是DOM树。这是实时的DOM,虚拟dom是react框架的事,在浏览器内存空间开辟构建了虚拟dom

在这里插入图片描述
框架操作虚拟dom来和dom比较,哪些是需要渲染的数据
在这里插入图片描述
JSX是一种规范,不按照这个来就会报错

在这里插入图片描述
凡是首字母小写都是标记,大写是组件
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
但凡return的跟不是一个,就会报错,而且是写在render函数中
在这里插入图片描述

看起来这里是html,实际上是xml,xml要求所有标签闭合,包括自己定义的组件标签,全部闭合,不闭合都不行
在这里插入图片描述
在这里插入图片描述

单行省略小括号,多行使用小括号
在这里插入图片描述在这里插入图片描述
元素有嵌套,建议多行,注意缩进
在这里插入图片描述
JSX是可以写表达式的,要求在整个区域内使用大括号,里面可以写表达式,类似之前的插值${i*j}跟外面的无关
在这里插入图片描述
在这里插入图片描述
hr就是一条水平线,写一个三元表达式
在这里插入图片描述
一旦保存,就出来效果了
在这里插入图片描述
也可以这么写
在这里插入图片描述
没有是因为显示的不是字符串
在这里插入图片描述
加个引号变成字符串
在这里插入图片描述
在这里插入图片描述
不放在大括号里就直接是字符串

在这里插入图片描述
在这里插入图片描述
这样就是返回的字符串
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
现在操作src和index是没有任何关系,只要告诉id号即可
在这里插入图片描述
ajax前后端分离,可以让项目进一步分化,可以向微服务方式部署

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值