第五章,API
React.Component
当使用ES6时,它是所有组件的父类。
import React from 'react';
export default class MyComponent extends React.Component {
render() {}
}
React.createClass
在不使用上面的ES6class语法时,可以使用该方法创建一个组件。
ReactClass createClass(object specification)
创建一个组件类,该组件类实现了render()方法并返回一个单根子节点(组件,多节点要包裹起来)。 组件类和普通JavaScript类不同点在于你不用使用new方法来实例化。
React.createElement
ReactElement createElement(
string/ReactClass type,
[object props],
[children ...]
)
使用指定的类型来创建并返回一个新的ReactElement。类型参数可以是一个普通的HTML元素标签名称(例如: div,span)或者一个ReactClass。
React.cloneElement
ReactElement cloneElement(
ReactElement element,
[object props],
[children ...]
)
用来克隆一个ReactElement。
React.createFactory
factoryFunction createFactory(string/ReactClass type)
返回一个生产ReactElement的方法。
React.isValidElement
boolean isValidElement(* object)
验证对象是否是标准的ReactElement。
React.DOM
React.DOM.Div(null, 'hello world')
这个API是给不使用JSX语法准备的,它是React.createElement的包装。
React.PropTypes
包含propTypes对象用来验证组件中props所有属性的类型信息。
React.Children
这个对象是操作不公开对象this.props.children的工具类。它有以下方法:
React.Children.map
array React.Children.map(object children, function fn [, object thisArg])
React.Children.forEach
React.Children.forEach(object children, function fn [, object thisArg])
React.Children.count
number React.Children.count(object children)
React.Children.only
object React.Children.only(object children)
React.Children.toArray
array React.Children.toArray(object children)
ReactDOM
ReactDOM提供一些具体操作DOM的方法,大多数情况下用户组件内部不需要使用它。
ReactDOM.render
ReactComponent render(
ReactElement element,
DOMElement container,
[function callback]
)
在给出的container中渲染一个ReactElement并返回它的引用。如果这个ReactElement之前已经在container中渲染过,它将只执行一个局部更新操作。
如果提供callback函数,这个函数将在渲染完成或者更新完成后被调用。
注意:该方法在执行时将会替换container中已经存在的DOM元素。
ReactDOM.unmountComponentAtNode
boolean unmountComponentAtNode(DOMElement container)
移除一个已经渲染的React组件并清理它的事件处理映射和状态处理映射。如果container中没有组件,该函数将不执行任何代码。
ReactDOM.findDOMNode
DOMElement findDOMNode(ReactComponent component)
这个方法用来查找并返回一个已经渲染的组件的原生DOM对象。这个方法常用来读取DOM额外的信息和操作DOM尺寸。大多数情况下,我们可以在DOM上添加ref来定位该DOM。
import React, {Component} from 'react';
import {findDOMNode} from 'react-dom';
export default class MyComponent extends Component {
render() {
return (
<div>
<input type="text" ref="ref_input" />
<button onClick={this.handleOnClick}>Add</button>
</div>
);
}
handleOnClick = () => {
const node = findDOMNode(this.refs.ref_input);
const value = node.value.trim();
console.log('input value=', value);
}
}
推荐尽可能少的使用该方法来访问底层DOM,这种做法不符合组件化思想。
如果在没有渲染的组件上使用该方法将会抛出异常。
该方法不能使用在无状态的组件上。
ReactDOMServer
react-dom/server包能让你在服务器端渲染你的组件。
ReactDOMServer.renderToString
string renderToString(ReactElement element)
渲染一个组件并返回它的HTML代码。主要是对搜索引擎爬虫,SEO友好。
ReactDOMServer.renderToStaticMarkup
string renderToStaticMarkup(ReactElement element)
大体和renderToString相同,但是不会在DOM上创建额外的属性比如data-react-id,这些属性仅供React内部使用。这能节省很多页面开销。