react-jsx
本文同步至微信公众号http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=402252760&idx=1&sn=6952c476fbed9a3d3833ab5860d3021e#rd,对后续文章的,可以扫码关注哈
react,出身名门,一发出就带着光环,号称是引领未来的用户界面开发框架。去年的时候,这个框架就已经吵的很火了。好吧,咱这个落伍的,现在才开始看。不过,个人觉得,对于这种上层的高富帅型的框架,用的时候学,都来得及。经济基础决定上层建筑,基础永远都是最重要的。要冷静要有自己的判断力。。。好了,停止bb,开始说正事。
首先,什么是jsx?
jsx即javascript XML,一种在React组建内部构建标签的类XML语法(语法糖,需要编译器将其编译为浏览器中可执行的js代码)。react在不使用jsx的情况下一样可以工作,然而使用jsx可以提高组建的可读性。
先搭一个环境跑起来再说哈。
代码的框架如上图,首先引入react核心库,及dom操作相关的类库react-dom.上文中有提到jsx不能直接在浏览器中运行,所以还要引入browser.js用来将jsx转换成浏览器中可执行的代码。这一步比较耗时,通常发布之前会先编译好。引入这三个类库之后,我们就可以开始写代码了。注意包含jsx语法的script标签的type类型为text/babel.
先看一个jsx的例子哈。
var names = ['Alice', 'Emily', 'Kate'];ReactDOM.render(
<div>
{
names.map(function (name) {
return <div>Hello, {name}!</div>
})
}
</div>,
document.getElementById('example'));
上面代码体现了 JSX 的基本语法规则:遇到 HTML 标签(以 <
开头),就用 HTML 规则解析;遇到代码块(以 {
开头),就用 JavaScript 规则解析。其运行结果如下图。
开始,使用jsx语法定义一个自定义组建。
var Divider = React.createClass({
render : function () {
return (
<div className = "divider">
<h2>question</h2><hr/>
</div>
);
}
});
以上代码定义了一个Divider组建。然后我们就可以像使用普通的html标签一样的使用它。ReactDOM.render(<Divider />, document.getElementById('example'));
其运行结果如下图:
不过这还只是一个一次性的组件。要让这个组件变得实用,还需要一种将h2标签中的文本动态的表示出来。
使用动态值
jsx将两个花括号之间的内容{...}渲染为动态值。花括号指定了一个javascript上下文环境,花括号中的任何东西都会被进行求值,得到的结果被渲染为标签中的若干节点。
对于简单值,比如文本或数字,可以直接引用对应的变量。可以这样渲染一个动态的h2标签。
var text = "test";
<h2>{text}</h2>
对于复杂的值,也可以定义一个函数进行求值,然后再花括号中调用这个函数。这里需要注意的是,花括号中的是一个函数调用。
function test () {
return 'react react';
}
<h2>{test()}</h2>。
react通过将数组中的每一个元素渲染为一个dom节点的方式对数组进行求值。
var text = ['hello', 'world'];
<h2>{text}</h2>
其渲染输出的为
<h2><span>hello</span><span>world</span></h2>
子节点
html中,使用<h2>test</h2>,这个test就是h2元素的文本节点。上面的例子中定义了一个组件Divider ,使用的时候调用ReactDOM.render(<Divider />)的方式。然而很多时候我们却想这么使用它。<Divider>content</Divider>.
React将开始标签与结束标签之前的所有子节点保存在一个名为htis.props.children的特殊属性中。这个例子中,this.props.children == ['content'].知道了这一点,就可以将硬编码的content替换为this.props.children。这样react就会把<Divider>之间的所有内容渲染出来了。
var Divider = React.createClass({
render : function () {
return (
<div className = "divider">
<h2>{this.props.children}</h2><hr/>
</div>
);
}
});
ReactDOM.render(<Divider>tesetsetset</Divider>, document.getElementById('example'));
属性
在html中,我们用内联的方式给每个节点设置属性,像这样:
<div id="some-id" class="some-class"></div>
jsx以同样的方式实现了属性设置,同时还提供了将属性设置为动态的javascript变量的便利。如下class的属性值就可以动态传入:
<div id=''divid' class={text}></div>
样式
react把所有内联样式都规范化了驼峰形式,与javascript中的dom的style属性一致。要添加一个自定义的样式属性,只需把驼峰式的属性名和css值拼装为对象即可。
var styles = {
borderColor: '#999',
}
React.renderComponent(<div style={style}>.....</div>, node);
事件
所有浏览器中,事件名已经规范化并统一用驼峰形式表示。例如,change变成了onChange,click变成了onClick。在jsx中,捕获一个事件就像给组件的方法设置一个属性一样简单。
hanldleClick: function () {}
render: function () {
return <div onClick = {this.handleClick}>...</div>
}
React会自动绑定组件所有方法的作用域,因此永远也不需要手动绑定。
反模式:
hanldleClick: function () {}
render: function () {
return <div onClick = {this.handleClick.bind(this)}>...</div>
}
最后,再总结一下。首先扯了一些jsx相关的一些概念。然后是,要想在代码中使用react,要引入react,react-com,browser等三个库。在然后是使用react定义一个组件<Divider>,在然后,动态属性,子元素,属性,样式,事件等一些常用操作。
还是文章开始的那个观点,经济基础决定上层建筑。如果你基础(html,css,javascript等)足够扎实,不管它流行的是什么库,上手都容易。但是基础不好,盲目的去追这些流行的库,也是不顶个鸟用的。
react-jsx的更多相关文章
- React(JSX语法)-----JSX基本语法
JSX------HTML tags vs React Components: 1.To render a html tag,just use lower-case tag names in JSX; ...
- 【go】脑补框架 Express beego tornado Flux reFlux React jsx jpg-ios出品
http://goexpresstravel.com/ 今天 Express 的作者 TJ Holowaychuk 发了一篇文章,正式宣告和 Node.js 拜拜了,转向 Go 语言. Go vers ...
- 在react jsx中,为什么使用箭头函数和bind容易出现问题
在之前的文章中,已经说明如何避免在react jsx中使用箭头函数和bind(https://medium.freecodecamp.o... 但是没有提供一个清晰的demo展示为什么要这样做. 现在 ...
- 在react jsx中使用if判断
在react jsx中如果使用if判断,需要这样做 var loginButton; if (loggedIn) { loginButton = <LogoutButton />; } e ...
- Airbnb React/JSX 编码规范
Airbnb React/JSX 编码规范 算是最合理的React/JSX编码规范之一了 内容目录 基本规范 Class vs React.createClass vs stateless 命名 声明 ...
- 学习 React(jsx语法) + es2015 + babel + webpack
视频学习地址: http://www.jtthink.com/course/play/575 官方地址 https://facebook.github.io/react/ 神坑: 1.每次this.s ...
- React JSX语法说明
原文:http://my.oschina.net/leogao0816/blog/379487 什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代 ...
- [React] Linting React JSX with ESLint (in ES6)
ESLint is a JavaScript linter (static analysis tool) that offers full support for ES6, JSX, and othe ...
- 2. React JSX语法及特点介绍
什么是JSX JSX 是一种类 XML 语言,全称是 JavaScript XML .React 可以不使用 JSX来编写组件,但是使用JSX可以让代码可读性更高.语义更清晰.对 Re ...
- React JSX基本语法规则
JSX基本语法规则: 遇到HTML(以 < 开头)标签,就用HTML规则解析: 遇到代码块(以 { 开头),就用JavaScript规则解析. 它允许HTML和JavaScript的混写. 注意 ...
随机推荐
- Android Event
2016-10-11 http://p.codekk.com/detail/Android/wcy10586/androidEvent https://my.oschina.net/u/191330/ ...
- Windows消息机制详解
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...
- XML编程知识点总结
DOM和SAX DOM的全称是Document Object Model,也即文档对象模型.基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合,应用程序挣是通过对这个对象模型的操作,来实 ...
- table的自动增加
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- ESXi Install OpenWRT
根据官方的提示,下载的img镜像需要转换为vmdk. 地址:http://wiki.openwrt.org/doc/howto/vmware 转换需要qemu-utils,网上的安装方法: #64位系 ...
- 集成IC刷卡器经验
因为一系列的原因,IC刷卡器要渐渐地取代磁条刷卡器.公司在这方面也是需要跟进的,在我负责集成IC刷卡器到应用程序的过程中,积累了些经验,现在分享下. 第一:无论是磁条还是IC刷卡器都是刷卡器的一种,所 ...
- IIS7 启用GZip压缩
GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加,无论是CSS合并.JS合并.图片合并都不如GZip压缩来得简单直接.如果一个网页是100K,那么启用GZip ...
- spring mvc <mvc:default-servlet-handler /> 。
spring mvc配置 <mvc:default-servlet-handler /> 时. 提示 The prefix "mvc" for element &quo ...
- tp中session用来做权限方法 (缓解mysql压力)
http://www.thinkphp.cn/code/2617.html
- Windows程序设再读笔记00-序言
最近打算重新读windows程序设计这本书,这是我第二次读这本书,上一次读已经是七八年前的事情了.当初读的时候,刚刚接触windows开发不久,很多东西都不能够完全理解.这几天重新读了几章,发现收获不 ...