组件 API
setState
- 合并 nextState 和当前 state。
- 这是在事件处理函数中和请求回调函数中触发 UI 更新的主要方法。
- 另外,也支持可选的回调函数,该函数在 setState 执行完毕并且组件重新渲染完成之后调用
- 注意:
- 绝对不要直接改变 this.state,
- setState() 不会立刻改变 this.state,而是创建一个即将处理的 state 转变。在调用该方法之后获取 this.state 的值可能会得到现有的值,而不是最新设置的值。
- setState() 将总是触发一次重绘,除非在 shouldComponentUpdate() 中实现了条件渲染逻辑。
- 如果使用可变的对象,但是又不能在 shouldComponentUpdate() 中实现这种逻辑,仅在新 state 和之前的 state 存在差异的时候调用 setState() 可以避免不必要的重新渲染。
replaceState
- 类似于
setState()
,但是删除之前所有已存在的 state 键,这些键都不在 nextState 中。
forceUpdate()
render()
方法从this.props
或者this.state
之外的地方读取数据,你需要通过调用forceUpdate()
告诉 React 什么时候需要再次运行render()
。- 如果直接改变了
this.state
,也需要调用forceUpdate()
- 调用
forceUpdate()
将会导致render()
方法在相应的组件上被调用,并且子级组件也会调用自己的render()
,但是如果标记改变了,那么 React 仅会更新 DOM
getDOMNode
- 如果组件已经挂载到了 DOM 上,该方法返回相应的本地浏览器 DOM 元素。
- 从 DOM 中读取值的时候,该方法很有用,比如获取表单字段的值和做一些 DOM 操作。
- 当
render
返回null
或者false
的时候,this.getDOMNode()
返回null
。
isMounted
- 如果组件渲染到了 DOM 中,
isMounted()
返回 true。可以使用该方法保证setState()
和forceUpdate()
在异步场景下的调用不会出错
setProps
- 调用
setProps()
来改变组件的属性,触发一次重新渲染。 - 另外,可以传递一个可选的回调函数,该函数将会在
setProps
完成并且组件重新渲染完成之后调用 - 刚方法仅在根组件上面调用。也就是说,仅在直接传给
React.render()
的组件上可用,在它的子级组件上不可用。如果你倾向于在子组件上使用setProps()
,不要利用响应式更新,而是当子组件在render()
中创建的时候传入新的 prop 到子组件中。
replaceProps
- 类似于
setProps()
,但是删除所有已存在的 props,而不是合并新旧两个 props 对象
顶层 API
React.createClass
- 创建一个组件类,并作出定义。组件实现了
render()
方法,该方法返回一个子级。 - 该子级可能包含很深的子级结构。
- 组件与标准原型类的不同之处在于,你不需要使用 new 来实例化。 组件是一种很方便的封装,可以(通过 new )为你创建后台实例。
React.createElement
- 创建并返回一个新的指定类型的
ReactElement
。 - type 参数可以是一个 html 标签名字字符串(例如,“div”,“span”,等等),或者是
ReactClass
(通过React.createClass
创建的)。
React.createFactory
- 返回一个生成指定类型 ReactElements 的函数。比如
React.createElement
, - type 参数可以是一个 html 标签名字字符串(例如,“div”,“span”,等等),或者是
ReactClass
。
React.render
- 渲染一个 ReactElement 到 DOM 中,放在
container
指定的 DOM 元素下,返回一个到该组件的引用。 - 如果 ReactElement 之前就被渲染到了
container
中,该函数将会更新此 ReactElement,仅改变需要改变的 DOM 节点以展示最新的 React 组件。 - 如果提供了可选的回调函数,则该函数将会在组件渲染或者更新之后调用。
React.unmountComponentAtNode
- 从 DOM 中移除已经挂载的 React 组件,清除相应的事件处理器和 state。
- 如果在 container 内没有组件挂载,这个函数将什么都不做。如果组件成功移除,则返回
true
;如果没有组件被移除,则返回false
。
React.renderToString
- 把组件渲染成原始的 HTML 字符串。该方法应该仅在服务器端使用。
- React 将会返回一个 HTML 字符串。你可以在服务器端用此方法生成 HTML,然后将这些标记发送给客户端,这样可以获得更快的页面加载速度,并且有利于搜索引擎抓取页面,方便做 SEO。
- 如果在一个节点上面调用
React.render()
,并且该节点已经有了服务器渲染的标记,React 将会维护该节点,并且仅绑定事件处理器,保证有一个高效的首屏加载体验。
React.renderToStaticMarkup
- string renderToStaticMarkup(ReactElement element)
- 和
renderToString
类似,除了不创建额外的 DOM 属性,例如data-react-id
,因为这些属性仅在 React 内部使用。如果你想用 React 做一个简单的静态页面生成器,这是很有用的,因为丢掉额外的属性能够节省很多字节。
React.isValidElement
- boolean isValidElement(* object)
- 判断对象是否是一个 ReactElement。
React.DOM
React.DOM
运用React.createElement
为 DOM 组件提供了方便的包装。该方式仅在未使用 JSX 的时候适用。例如,React.DOM.div(null, ‘Hello World!‘)
。
React.PropTypes
React.PropTypes
包含了能与组件propTypes
对象共用的类型,用于验证传入组件的 props。更多有关propTypes
的信息,参考复用组件。
React.initializeTouchEvents
- initializeTouchEvents(boolean shouldUseTouch)
- 配置 React 的事件系统,使 React 能处理移动设备的触摸( touch )事件。
React.Children
React.Children
为处理this.props.children
这个封闭的数据结构提供了有用的工具。
React.Children.map
- object React.Children.map(object children, function fn [, object context])
- 在每一个直接子级(包含在
children
参数中的)上调用fn
函数,此函数中的this
指向上下文
。 - 如果
children
是一个内嵌的对象或者数组,它将被遍历:不会传入容器对象到fn
中。 - 如果 children 参数是
null
或者undefined
,那么返回null
或者undefined
而不是一个空对象。
React.Children.forEach
- React.Children.forEach(object children, function fn [, object context])
- 类似于
React.Children.map()
,但是不返回对象。
React.Children.count
- number React.Children.count(object children)
- 返回
children
当中的组件总数,和传递给map
或者forEach
的回调函数的调用次数一致。
React.Children.only
- object React.Children.only(object children)
- 返回
children
中仅有的子级。否则抛出异常。
时间: 2024-10-01 16:19:08