React之JSX语法
1. JSX的介绍
JSX(JavaScript XML)——一种在React组件内部构建标签的类XML语法。react在不使用JSX的情况下一样可以工作,然而使用JSX可以提高组件的可读性,因此推荐使用JSX。
- 基于ECMAScript的一种新特性
- 一种定义带属性树结构的语法
JSX的特性:
它具备以下好处:
- 更加熟悉
- 更加语义化
- 更加直观
- 抽象化
- 关注分离点
2.JSX的使用
- React对大小写敏感,如果是自定义组件,则必须首字母大写,如果是DOM自带的标签,则要小写(比如div p span等),否则可能出错,这也是一种规范。
- 嵌套
- 求值表达式。(可以使用表达式,例如’>’,’<’,三目表达式等,但是函数无法使用,例如if……else)
- 驼峰命名
- htmlFor className
为组件使用css样式:
JSX语法只支持求值表达式,不支持函数,这里有四种条件判断的写法:
三目运算符
使用变量,并在属性中引用
直接调用函数,讲逻辑转化到函数中
比较运算符(|| &&)
还有一种万能函数表达式:
3.非DOM属性
JSX中引入了三个非DOM属性:dangerouslySetInnerHTML、ref、key
1.dangerouslySetInnerHTML
function createMarkup() { return {__html: 'First · Second'}; };
<div dangerouslySetInnerHTML={createMarkup()} />
在JSX中直接插入HTML代码。
会被增加被跨站攻击的可能(XSS)
用例:
如果是这样:
<div id="demo"></div>
<script type="text/babel">
var Test = React.createClass({
getInitialState: function() {
return {html: '我想让它换行显示<br />,我想让它换行显示<br />'};
},
render: function() {
return (
<div>{this.state.html}</div>
);
}
});
ReactDOM.render(
<Test />,
document.getElementById('demo')
);
</script>
浏览器将会显示:
我们可以看到,React并没有帮我们将<br> 标签,解析成html,而是直接当成字符串处理,这是为了安全考虑,避免XSS攻击。
而如果我们已经确保语句安全,并且想要实现将<br> 标签出来,则就需要dangerouslySetInnerHTML:
<div id="demo1"></div>
<script type="text/babel">
var rawHTML={
__html:"我想让它换行显示<br />,我想让它换行显示<br />"
};
ReactDOM.render(
<div dangerouslySetInnerHTML={rawHTML}></div>,
document.getElementById('demo1')
);
</script>
浏览器将会显示:
我们可以看到,这里已经是换行了,也就是说React已经将<br> 标签解析成了我们想要的html。
2.ref
组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff ,它可以极大提高网页的性能表现。
但是,有时需要从组件获取真实 DOM 的节点,这时就要用到 ref 属性。
var MyComponent = React.createClass({
handleClick: function() {
this.refs.myTextInput.focus();
},
render: function() {
return (
<div>
<input type="text" ref="myTextInput" />
<input type="button" value="Focus the text input" onClick={this.handleClick} />
</div>
);
}
});
ReactDOM.render(
<MyComponent />,
document.getElementById('example')
);
3.key
<div id="demo3"></div>
<script type="text/babel">
var UseKey=React.createClass({
render:function(){
return <ul>
<li key="1">a</li>
<li key="2">b</li>
<li key="3">c</li>
</ul>
}
});
ReactDOM.render(
<UseKey />,
document.getElementById('demo3')
);
</script>
浏览器显示:
注意:同一个组件之内,不能出现相同的key,列表之类的组件,最好加上key属性,可以提升性能
引用原文:http://blog.csdn.net/deeplies/article/details/52641073
写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!
如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!
React之JSX语法的更多相关文章
- 前端笔记之React(一)初识React&组件&JSX语法
一.React项目起步配置 官网:https://reactjs.org/ 文档:https://reactjs.org/docs/hello-world.html 中文:http://react.c ...
- 【JAVASCRIPT】React学习-JSX 语法
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 JSX 语法 1. 定义 JSX 是javascript + xml 的合集,我们可以将javascript 与 ht ...
- react的jsx语法
在webpack.config.js中配置解析的loader { test:/\.jsx?$/, use:{ loader:"babel-loader", options:{ pr ...
- react 的JSX语法需要注意哪些点?
注释方式 ReactDOM.render( <div> {/*JSX 中的注释方式*/} </div>, document.getElementById('root') ) j ...
- React之jsx语法特性
jsx 语法,直接可以在js中使用html标签. 还可以通过花括号的形式,在html标签中,写js表达式. <div> { 1 + 2 } hello,world! </div> ...
- React使用JSX语法
目录: 1.在React项目中启用JSX语法 2.在JSX中写js代码 3.使用JSX注意事项 1.在React项目中启用JSX语法 <--返回目录 JSX语法:符合xml规范的js语法 JS ...
- 3.react 基础 - JSX 语法
1.最基础的 JSX 语法 普通javaScript中 引入 标签 let html = '<h1>hello</h1>'; jsx语法 let JSX_html = < ...
- React的jsx语法,详细介绍和使用方法!
jsx语法 一种混合使用html及javascript语法的代码 在js中 遇到<xx>即开始html语法 遇到</xx>则结束html语法 恢复成js语法 例如: let D ...
- React的JSX语法及组件
最近一个同事很急没有做任何交接就请了陪产假,然后我来维护.说实在的我一开始是一脸懵逼的.因为MV*项目里用的最多的还是Vue:React听说也了解过,但毕竟不熟... 不过不管如何这也是工作:同事也恭 ...
随机推荐
- poj 3275(传递闭包)
题目链接:http://poj.org/problem?id=3275 思路:对于n个节点,共有n*(n-1)/2对关系,对于给出的m对已经确定的关系,我们可以用传递闭包推出目前已经确定的关系对数an ...
- $().each() 与 $.each()区别,以及 jquery ajax 应用
在jquery 中我们可以选择$().each() 与 $.each() 进行迭代对象和数组 $(items).each(function(){ //item }) , 而后者则 $.each(i ...
- 高性能javascript 文件加载阻塞
高性能javascript javascript脚本执行过程中会中断页面加载,直到脚本执行完毕,此操作阻塞了页面加载,造成性能问题. 脚本位置和加载顺序:如果将脚本放在head内,那么再脚本执行完 ...
- 【BZOJ5060】魔方国 特判
[BZOJ5060]魔方国 Description 小奇和魔法猪打开了战狂的遗迹,穿越到了东元20年.东元元年,战狂率领一千万士兵毁灭了一个又一个文明,并建立起了新文明——昌和帝国,招募了八位伟人:大 ...
- iOS设置导航栏透明度
As I support Colin's answer, I want to give you an additional hint to customize the appearance of an ...
- 160706、Java HashMap工作原理及实现
1. 概述 从本文你可以学习到: 什么时候会使用HashMap?他有什么特点? 你知道HashMap的工作原理吗? 你知道get和put的原理吗?equals()和hashCode()的都有什么作用? ...
- python中pip工具的安装与使用
1.在网址https://pip.pypa.io/en/latest/installing 下载get-pip.py文件,放在python更目录,如python3.6目录下 2.在dos命令行中进入g ...
- ChannelOption用到的socket的标准参数
ChannelOption.SO_BACKLOG, 1024 BACKLOG用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最 ...
- finereport-JS
JS实现定时刷新报表 setInterval("self.location.reload();",10000); //10000ms即每10s刷新一次页面. 注:对于cpt报表,若 ...
- Powershell运行Invoke-Sqlcmd命令的先决条件
运行Invoke-Sqlcmd命令,使用这个命令需满足如下条件: 1.在运行服务器中安装SQL Server 2008 R2 Management ObjectsI 2.在运行命令 invoke-sq ...