博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器解析jsx_jsx的本质
阅读量:6621 次
发布时间:2019-06-25

本文共 1807 字,大约阅读时间需要 6 分钟。

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。去掉后会找不到,

25ae65546b9047f81117d4846aedc285.png

看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函数

转载地址:http://iucpo.baihongyu.com/

你可能感兴趣的文章
ROC曲线(receiver-operating-characteristic curve)-阈值评价标准(转)
查看>>
Swift 表达式
查看>>
FFmpeg(8)-打开音视频解码器,配置解码器上下文(avcodec_find_decoder()、avcodec_alloc_context3())...
查看>>
Javascript基础恶补
查看>>
andriod自定义视图
查看>>
linux下vim更改注释颜色
查看>>
在SSL / https下托管SignalR
查看>>
Using JRuby with Maven
查看>>
poj 3308 (最大流)
查看>>
Netty了解与小试
查看>>
醒醒吧少年,只用Cucumber不能帮助你BDD
查看>>
众安质量学堂文章汇总
查看>>
AsyncHttpSupport并发发送请求
查看>>
一名女程序员对iOS的想法
查看>>
Cloud Native未来值得关注的方向:Service Mesh简介
查看>>
西班牙现新型电费退款网络诈骗 侨胞需谨防上当
查看>>
JVM新生代和老年代配置原则
查看>>
昆明滇池水质达30年来最好 百名“市民河长”守卫“母亲河”
查看>>
太合音乐发布“少年红星音乐计划” 力促00后创作浪潮
查看>>
ICO后STO也被明令禁止,区块链并不是法外之地
查看>>