1.顶层API1.1ReactReact是React库的入口。如果使用的是预编译包,则React是全局的;如果使用CommonJS模块系统,则可以用require()函数引入React。ClassReactClasscreateClass(objectspecification)创建一个组件类,并作出定义。组件实现了render()方法,该方法返回一个子级。该子级可能包含很深的子级结构。组件与标准原型类的不同之处在于,你不需要使用new来实例化。组件是一种很方便的封装,可以(通过new)为你创建后台实例。更多关于定义组件对象的信息,参考组件定义和生命周期。ElementReactElementcreateElement(string/ReactClasstype,[objectprops],[])
创建并返回一个新的指定类型的ReactElement。type参数可以是一个html标签名字字符串(例如,“div”,“span”,等等),或者是ReactClass(通过Class创建的)。FactoryfactoryFunctioncreateFactory(string/ReactClasstype)返回一个生成指定类型ReactElements的函数。比如Element,type参数可以是一个html标签名字字符串(例如,“div”,“span”,等等),或者是ReactClass。ReactComponentrender(ReactElementelement,DOMElementcontainer,[functioncallback])渲染一个ReactElement到DOM中,放在container指定的DOM元素下,返回一个到该组件的引用。
如果ReactElement之前就被渲染到了container中,该函数将会更新此ReactElement,仅改变需要改变的DOM节点以展示最新的React组件。如果提供了可选的回调函数,则该函数将会在组件渲染或者更新之后调用。注意:()替换传入的容器节点内容。在将来,或许可能插入组件到已存在的DOM节点中,但不覆盖已有的子节点。tComponentAtNodebooleanunmountComponentAtNode(DOMElementcontainer)从DOM中移除已经挂载的React组件,清除相应的事件处理器和state。如果在container内没有组件挂载,这个函数将什么都不做。如果组件成功移除,则返回true;如果没有组件被移除,则返回false。ToStringstringrenderToString(ReactElementelement)把组件渲染成原始的HTML字符串。该方法应该仅在服务器端使用。React将会返回一个HTML字符串。你可以在服务器端用此方法生成HTML,然后将这些标记发送给客户端,这样可以获得更快的页面加载速度,并且有利于搜索引擎抓取页面,方便做SEO。
如果在一个节点上面调用(),并且该节点已经有了服务器渲染的标记,React将会维护该节点,并且仅绑定事件处理器,保证有一个高效的首屏加载体验。ToStaticMarkupstringrenderToStaticMarkup(ReactElementelement)和renderToString类似,除了不创建额外的DOM属性,例如data-react-id,因为这些属性仅在React内部使用。如果你想用React做一个简单的静态页面生成器,这是很有用的,因为丢掉额外的属性能够节省很多字节。dElementbooleanisValidElement(*object)判断对象是否是一个ReactElement。运用Element为DOM组件提供了方便的包装。该方式仅在未使用JSX的时候适用。例如,(null,'HelloWorld!')。pes
pes包含了能与组件propTypes对象共用的类型,用于验证传入组件的props。更多有关propTypes的信息,参考复用组件。lizeTouchEventsinitializeTouchEvents(booleanshouldUseTouch)配置React的事件系统,使React能处理移动设备的触摸(touch)事件。en为处理en这个封闭的数据结构提供了有用的工具。(objectchildren,functionfn[,objectcontext])在每一个直接子级(包含在children参数中的)上调用fn函数,此函数中的this指向上下文。如果children是一个内嵌的对象或者数组,它将被遍历:不会传入容器对象到fn中。如果children参数是null或者undefined,那么返回null或者undefined而不是一个空对象。h(objectchildren,functionfn[,objectcontext])类似于(),但是不返回对象。(objectchildren)
返回children当中的组件总数,和传递给map或者forEach的回调函数的调用次数一致。(objectchildren)返回children中仅有的子级。否则抛出异常。2.组件API2.1ReactComponentReact组件实例在渲染的时候创建。这些实例在接下来的渲染中被重复使用,可以在组件方法中通过this访问。唯一一种在React之外获取React组件实例句柄的方式就是保存的返回值。在其它组件内,可以使用refs得到相同的结果。2.1.1setStatesetState(objectnextState[,functioncallback])合并nextState和当前state。这是在事件处理函数中和请求回调函数中触发UI更新的主要方法。另外,也支持可选的回调函数,该函数在setState执行完毕并且组件重新渲染完成之后调用。注意:
绝对不要直接改变,因为在之后调用setState()可能会替换掉你做的更改。把当做不可变的。setState()不会立刻改变,而是创建一个即将处理的state转变。在调用该方法之后获取的值可能会得到现有的值,而不是最新设置的值。不保证setState()调用的同步性,为了提升性能,可能会批量执行state转变和DOM渲染。setState()将总是触发一次重绘,除非在shouldComponentUpdate()中实现了条件渲染逻辑。如果使用可变的对象,但是又不能在shouldComponentUpdate()中实现这种逻辑,仅在新state和之前的state存在差异的时候调用setState()可以避免不必要的重新渲染。2.1.2replaceStatereplaceState(objectnextState[,functioncallback])类似于setState(),但是删除之前所有已存在的state键,这些键都不在nextState中。2.1.3forceUpdate()forceUpdate([functioncallback])如果render()方法从或者之外的地方读取数据,你需要通过调用forceUpdate()告诉React什么时候需要再次运行render()。如果直接改变了,也需要调用forceUpdate()。
调用forceUpdate()将会导致render()方法在相应的组件上被调用,并且子级组件也会调用自己的render(),但是如果标记改变了,那么React仅会更新DOM。通常情况下,应该尽量避免所有使用forceUpdate()的情况,在render()中仅从和中读取数据。这会使应用大大简化,并且更加高效。2.1.4getDOMNodeDOMElementgetDOMNode()如果组件已经挂载到了DOM上,该方法返回相应的本地浏览器DOM元素。从DOM中读取值的时候,该方法很有用,比如获取表单字段的值和做一些DOM操作。当render返回null或者false的时候,Node()返回null。2.1.5isMounted()boolisMounted()如果组件渲染到了DOM中,isMounted()返回true。可以使用该方法保证setState()和forceUpdate()在异步场景下的调用不会出错。2.1.6setPropssetProps(objectnextProps[,functioncallback])当和一个外部的JavaScript应用集成的时候,你可能想给一个用()渲染的组件打上改变的标记。尽管在同一个节点上再次调用()来更新根组件是首选的方式,也可以调用setProps()来改变组件的属性,触发一次重新渲染。另
外,可以传递一个可选的回调函数,该函数将会在setProps完成并且组件重新渲染完成之后调用。注意:Whenpossible,()againispreferred;ittendstomakeupdateseasiertoreasonabout.(There'snosignificantperformancedifferencebetweenthetwoapproaches.)刚方法仅在根组件上面调用。也就是说,仅在直接传给()的组件上可用,在它的子级组件上不可用。如果你倾向于在子组件上使用setProps(),不要利用响应式更新,而是当子组件在render()中创建的时候传入新的prop到子组件中。2.1.7replacePropsreplaceProps(objectnextProps[,functioncallback])类似于setProps(),但是删除所有已存在的props,而不是合并新旧两个props对象。3.组件的详细说明和生命周期(ComponentSpecsandLifecycle)
3.1组件的详细说明(ComponentSpecifications)当通过调用Class()来创建组件的时候,你应该提供一个包含render方法的对象,并且也可以包含其它的在这里描述的生命周期方法。3.1.1renderReactComponentrender()render()方法是必须的。当调用的时候,会检测和,返回一个单子级组件。该子级组件可以是虚拟的本地DOM组件(比如
发表评论