浏览器解析jsx_jsx的本质
jsx语法
1、所有html标签他都支持
2、大括号里面可以引入js变量 或者 表达式 {name || ''}
3、可以做判断 {show ? '' : ''}
4、可以循环 {list.map(item=>{ return
{item}})}
5、样式 style={{fontSize:'40px'}}
jsx解析成js
jsx语法根本无法被浏览器解析,比如大括号的那种。像vue中的v-if,v-model等等,也无法直接浏览器运行。那么它如何在浏览器运行。最终都是转化为js运行的。
import React from 'react';
import Todo from'./components/todo/index'
functionApp() {return(
);
}
exportdefault App;
看这段代码,其他都用了,但是import React,这个 React 没用。但是要import进来,去掉之后肯定报错。报错了肯定是用了。在jsx转化为js的时候用到了React。去掉后会找不到,
看jsx的解析过程,先需要React.createElement去创建标签,第一个是标签名,第二个是属性,第三个,第四个,,,后面都是子元素。这个跟vdom里面的h函数非常像。跟vue中的_c函数也很像。
render() {
const list= this.props.data;return(
- {
list.map((item,index)=>{return
{item}
})
}
)
}functionrender() {
const list= this.props.data;returnReact.createElement('ul',null,
list.map((item,index)=>{returnReact.createElement('li',
{key: index},
item
)
})
)
}
这个就是jsx解析,命中了jsx的第二种用法,第三个是数组
所以jsx其实是语法糖,开发环境会将jsx编译成js代码,jsx的写法大大降低了学习成本和编码工作量,同时,jsx也会增加debug成本
独立的标准
jsx是React引入的,但不是React独有的。React已经将它作为独立标准开放,其他项目也可用。React.createElement是可以自定义修改的。标准化的前提是本身功能已经完备,和其他标准兼容和扩展性没问题
新建一个文件夹,然后npm init -y。然后新建一个文件叫demo.jsx
class Input extends Component {
render(){return(
submit
)
}
}
全局安装babel
sudo npm i babel -g (一般都安装过了)
然后安装jsx插件
npm install -save-dev babel-plugin-transform-react-jsx
然后创建.babelrc文件
{"plugins": ["transform-react-jsx"]
}
配置完之后就可以运行了
babel --plugins transform-react-jsx demo.jsx
然后编译出的js代码长这样
class Input extends Component {
render() {returnReact.createElement("div",null,
React.createElement("input", { value: this.state.title, onChange: this.changeHandle.bind(this) }),
React.createElement("button",
{ onClick:this.clickHandle.bind(this) },"submit")
);
}
}
这就是通过transform-react-jsx编译jsx语法的过程。
我们说React.createElement是可以改的,然后在demo.jsx上方加一行
/*@jsx h*/
然后运行
babel --plugins transform-react-jsx demo.jsx
就发现createElement被改成了h函数
浏览器解析jsx_jsx的本质相关推荐
- 谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】
谈一谈浏览器解析CSS选择器的过程? 这是一道发散题,可以根据自己的理解自行解答. 在开始前,我们必须了解一个真相:为什么排版引擎解析 CSS 选择器时一定要从右往左解析? 简单的来说:浏览器从右到左 ...
- 浏览器解析jsx_React——JSX语法
JSX(JavaScript XML)是 js 内定义的一套类 XML 语法,可以解析出目标 js 代码,颠覆传统 js 写法.HTML 由浏览器解析,而 JSX 是由 js 解析.当让也可以通过构建 ...
- css设置元素的宽高为整数,为什么有的浏览器解析出来的宽高是小数?
如图: 因为把当前的标签页缩放显示了,所以浏览器会渲染出非整数的盒子尺寸 参考文章:css设置元素的宽高为整数,为什么有的浏览器解析出来的宽高是小数? - 孙北吉的回答 - 知乎
- 详解浏览器解析一个URL的全过程
目录 1.浏览器解析url 2.DNS域名解析 3.浏览器获取端口号 4.TCP建立连接 5.发送HTTP请求 6.服务器处理请求 7.返回响应结果 8.关闭TCP连接 9.浏览器加载解析渲染 先概括 ...
- 浏览器解析JavaScript原理
1.浏览器解析JavaScript原理特点: 1.跨平台 2.弱类型 javascript 定义的时候不需要定义数据类型,数据类型是根据变量值来确定的. var a = 10; 数字类型 ...
- html怎么用chrome测试,通过chrome调试器测试了解浏览器解析和渲染HTML的过程
基础知识了解chrome的Timeline工具 主要过程 解析与构建DOM树1外部样式脚本并行加载外部样式会阻塞后续脚本执行直到外部样式加载并解析完毕 2 外部样式不会阻塞后续脚本的加载但会阻塞后续脚 ...
- 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置script元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分...
找到你的位置(JS在页面中的位置) 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页 ...
- Java压缩技术(五) GZIP相关——浏览器解析
转载自 Java压缩技术(五) GZIP相关--浏览器解析 GZIP本身就是一种网络流压缩算法,而且应用相当广泛.如果网络访问过程中,其数据流较大,势必降低网络访问效率,此时就需要考虑使用压缩!当 ...
- [css] 说说浏览器解析CSS选择器的过程?
[css] 说说浏览器解析CSS选择器的过程? 按照从上到下,从右到左的顺序解析. 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起 ...
- 浏览器字体大小设置_CSS之 浏览器解析样式的过程
阅读本文约需要10分钟 大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务! 1.长期为你提供最优质的学习资源! 2.给你解决技术问题! 3.每天在朋友圈里分 ...
最新文章
- Oracle --获取绑定变量的值.
- 用ATL的W2A和A2W宏转换Unicode与ANSI字符串
- 网络营销——网络营销专员如何将网站优化技能持久点亮
- python excel 自动化-python操作excel让工作自动化
- 晒桌面 | 非主流五线产品汪的简单原木风工作台
- SHOP++源码部署说明:
- asp.net读取用户控件,自定义加载用户控件
- memcache 原理 监测 查看状态 stats 结构
- 面向数据自治开放的数据盒模型
- linux 下外语学习软件_学习外语如何帮助您学习编码
- 标准的SQL的解析顺序
- ecs mysql 安装_CentOS8 安装MySQL8(ECS系列二)
- JQUERY简单实现点击图片放大效果
- Python学习笔记之疑问 1:def 是什么意思
- Python获取对象所占内存大小方法
- Web前端人员如何提升能力 提高效率有哪些方法
- Speedoffice(excel)如何自动换行
- 喜剧院线电影《大夫我没病》在京开机
- android10(Q) API29下,通过getDeviceId()方法获取imei 报错的处理办法
- 使用Arduino和HCSR04超声波传感器进行简单的超声波悬浮
热门文章
- 一键开关Oracle服务
- 电路分析题目详解(四)
- Ubuntu20.04(标题栏实时显示网速,cpu以及内存使用率)
- 【大数据】大数据-实时统计分析-方案选型
- 亚马逊养号遛号Selenium自动化测试工具介绍,依托于VMLogin指纹浏览器配套实现。
- [转自有道]十六种英语时态傻傻分不清?一篇文章告诉你它们的所有用法
- 收款码三合一制作微信小程序源码下载多模板选择
- win7计算机系统减肥,win7系统怎么瘦身?教您系统瘦身方法
- Log4j2 日志级别
- PHP 获取YouTube视频相关信息(Youtube Api v3)