JSX
可以减少定义组件的复杂性,但对于React来说JSX
并不是必须的,JSX
标签最终会被转换为原生的JavaScript。除使用JSX
语法外,还可以使用React
提供的API来创建组件。本文将介绍使用React创建元素,及一些React中重要的API。
1.React
引用
React是React库的入口,React
中所有的方法都是通过该对象调用,React
支持AMD
和CommonJS
(CMD)两种规范引用。
AMD规范的预编译包,React
是全局的,可以像下现这样引用:
<!DOCTYPE html> <html> <head> <Meta charset="UTF-8" /> <!--引用React--> <script src="build/react.js"></script> </head> <body> <div id="example"></div> <script type="text/babel"> // 使用用React React.render(……); </script> </body> </html>
CommonJS模块系统(如:Node.js)中,使用require
来引用React:
// 引用React var React = require('react'); // 使用React React.render(……);
2. 元素操作API
使用非JSX
语法创建组件,首先要创建React元素(ReactElement
)。React提供了创建元素、复制元素等方法。
2.1 创建元素:React.createElement()
ReactElement createElement( string/ReactClass type,[object props],[children ...] )
该方法创建并返回一个ReactElement
对象,其参数如下:
type
,可以是一个HTML标签
或是一个React组件
(ReactClass
)props
,可选参数,表示对象的属性children
,第三个参数及其后的参数都会被认为是元素的子元素- 返回值:
ReactElement
对象
示例,创建一个如下结构的组件:
<div className="myClass"> <h2>itbilu.com</h2><hr/> </div>
使用createElement()
方法操作如下:
ReactDOM.render( React.createElement('div',{className:'myClass'},React.createElement('h2',null,'itbilu.com'),React.createElement('hr') ),document.getElementById('example') ); // itbilu.com
2.2 元素克隆:React.cloneElement()
ReactElement cloneElement( ReactElement element,sans-serif; font-size:14px; line-height:20px"> 该方法会从已有的ReactElement
中复制,并返回一个新的element
,一个React元素
(ReactElement
)
示例,已有如下元素:
React.createElement('div');
cloneElement()
复制这个元素,并最终生前面示例中的HTML。复制方法如下,详见cloneElement.html:
var div = React.createElement('div'); ReactDOM.render( React.cloneElement(div,document.getElementById('example') );
2.3React.DOM
命名空间
React.DOM命名空间中是创建各种HTML元素的工厂方法,所有的方法都是对React.createElement()
方法的封装,通过这个命名空间也以快捷的创建各个HTML元素。
ReactElement DOM.HTML_TAG( [object props],sans-serif; font-size:14px; line-height:20px"> 创建一个名HTML_TAG
的ReactElement
,其参数如下:
React.createElement('div'); React.DOM.div();
2.4 有效元素判断:isValidElement()
React提供了isValidElement()
方法,用于判断传入对象是否是有效的ReactElement
。
boolean isValidElement(* object)
示例如下:
var div = React.createElement('div'); React.isValidElement(div); // true React.isValidElement(document.getElementById('example')); // fase
3. 组件操作API
组件(Component
)是对一个或一系列ReactElement
的封装,在React中组件被认为是最小的功能分离点。合理的利用组件,可以解耦业务复杂度,更可以高效的完成UI的编写。
3.1 创建组件类:createClass()
ReactClass createClass(object specification)
创建并返回一个组件类(ReactClass
)。组件内部必须实现render()
方法,并且返回一个单个子级,而其内部可能会有很深的子级结构。
示例,将前面示例中的HTML结构定义成一个组件(createClass.html):
var App = React.createClass({displayName: 'App',render: function () { return (React.createElement('div',this.props.children),React.createElement('hr') )); } });
创建组件类后,要将其渲染到页面除可以使用JSX
语法引用组件外,还可以使用以下两种方法:
3.2 创建元素工厂函数:createFactory()
factoryFunction createFactory( string/ReactClass type )
创建一个返回ReactElements
的工厂函数:
- type,HTML标签(如:div、body等)或
ReactClass
如,对前面的组件类创建一个工厂函数(createFactory.html):
var AppClass = React.createClass({displayName: 'App',React.createElement('hr') )); } }); var App = React.createFactory(AppClass);
创建后就不再需要使用JSX
或cerateElement()
方法:
ReactDOM.render( App(null,document.getElementById('example') );
React提供的API来创建组件。本文将介绍使用React创建元素,及一些React中重要的API。
React引用
CMD)两种规范引用。
React是全局的,可以像下现这样引用:
<!DOCTYPE html> <html> <head> <Meta charset="UTF-8" /> <!--引用React--> <script src="build/react.js"></script> </head> <body> <div id="example"></div> <script type="text/babel"> // 使用用React React.render(……); </script> </body> </html>
require来引用React:
// 引用React var React = require('react'); // 使用React React.render(……);
2. 元素操作API
ReactElement)。React提供了创建元素、复制元素等方法。
React.createElement()
ReactElement对象,其参数如下:
ReactClass
)props
,可选参数,表示对象的属性children
,第三个参数及其后的参数都会被认为是元素的子元素- 返回值:
ReactElement
对象
示例,创建一个如下结构的组件:
<div className="myClass"> <h2>itbilu.com</h2><hr/> </div>
createElement()方法操作如下:
createElement.html
React.cloneElement()
ReactElement)
示例,已有如下元素:
React.createElement('div');
cloneElement.html:
React.DOM
命名空间
React.createElement()方法的封装,通过这个命名空间也以快捷的创建各个HTML元素。
ReactElement,其参数如下:
- type。以下两种方式执行结果相同:
React.createElement('div'); React.DOM.div();
isValidElement()
ReactElement。
boolean isValidElement(* object)
示例如下:
var div = React.createElement('div'); React.isValidElement(div); // true React.isValidElement(document.getElementById('example')); // fase
3. 组件操作API
ReactElement的封装,在React中组件被认为是最小的功能分离点。合理的利用组件,可以解耦业务复杂度,更可以高效的完成UI的编写。
createClass()
ReactClass createClass(object specification)
render()方法,并且返回一个单个子级,而其内部可能会有很深的子级结构。
createClass.html):
JSX语法引用组件外,还可以使用以下两种方法:
- 使用
ReactElement
- 使用
ReactElement
createFactory()
factoryFunction createFactory( string/ReactClass type )ReactElements的工厂函数:
- ReactClass
createFactory.html):
cerateElement()方法: