主要變更
● ?加入了document.createElement炮车,取消了data-reactid
? ? ? ?關(guān)于與DOM的交互方式纯路,發(fā)生了重大改動(dòng)质欲。最顯著的改動(dòng)在于:不再為每個(gè)DOM節(jié)點(diǎn)設(shè)置data-reactid屬性浸剩,使react更加輕量級(jí)零渐。此外在變更后擦盾,在最初的渲染中也能使用document.createElement了嘲驾。隨著瀏覽器的優(yōu)化,使用createElement之后迹卢,React速度更快辽故。使用id將事件映射回React組件,代表著盡管存在著大量的緩存數(shù)據(jù)腐碱,每個(gè)事件仍要完成一堆的工作誊垢。我們都有這樣的經(jīng)歷:緩存,尤其是無效緩存很容易導(dǎo)致出錯(cuò)症见,結(jié)果就是這些年來出現(xiàn)了一大堆難以復(fù)現(xiàn)的問題∥棺撸現(xiàn)在,由于對(duì)節(jié)點(diǎn)有了控制權(quán)谋作,在渲染時(shí)我們可以構(gòu)建出直接映射芋肠。
注意:在服務(wù)器渲染內(nèi)容中,還會(huì)存在data-reactid瓷们,不過會(huì)比以前少得多业栅,自動(dòng)遞增的序號(hào)也會(huì)更簡單。
● ?取消額外的<span>
在DOM交互中還有一項(xiàng)大變化谬晕,就是我們渲染文本模塊的方式碘裕。之前react在渲染是會(huì)加入很多額外的span,現(xiàn)在渲染后純文本節(jié)點(diǎn)與用于界定的注釋交錯(cuò)排列攒钳。在DOM交互中還有一項(xiàng)大變化帮孔,就是我們渲染文本模塊的方式。由于依賴所生成標(biāo)記的用戶很少不撑,此項(xiàng)修改的影響面也會(huì)很小文兢。不過,如果你在CSS中使用了這些作為對(duì)象的話焕檬,可能需要做出相應(yīng)的調(diào)整姆坚。不過在組件中,你隨時(shí)可以執(zhí)行渲染实愚。
●? 渲染返回null目前改成了注釋節(jié)點(diǎn)
我們也利用注釋節(jié)點(diǎn)修改了null兼呵,這個(gè)功能是在React 0.11中加入的兔辅,通過渲染<noscript>元素實(shí)現(xiàn)。在改用注釋節(jié)點(diǎn)渲染后击喂,有些CSS可能會(huì)指向錯(cuò)誤的對(duì)象维苔,特別在使用了:nth-child時(shí)。在React中懂昂,<noscript>標(biāo)記的運(yùn)用一直被看作是React指向DOM方式的實(shí)現(xiàn)細(xì)節(jié)介时。由于這些細(xì)節(jié)并沒有相關(guān)依賴,我們認(rèn)為可以在這一版中直接作出修改凌彬,而無需先發(fā)一個(gè)版本讓大家體驗(yàn)其中細(xì)微的差異沸柔。此外在很多主要應(yīng)用中,我們已經(jīng)看到了這些變化對(duì)React的性能帶來的提高饿序。
● ?函數(shù)組件也可返回null
在React 0.14中勉失,增加了我們?cè)黾恿藢?duì)定義無狀態(tài)組件為函數(shù)的支持羹蚣。然而原探,在React 0.14中我們?nèi)钥梢栽诓恍钄U(kuò)展React.Component或使用React.createClass()的情況下,對(duì)類組件進(jìn)行定義顽素,因此我們無法確定這個(gè)組件是類組件還是函數(shù)組件咽弦;并且在0.14版本中,類組件是不會(huì)返回null的胁出。這個(gè)問題在React 15中得到了解決型型,現(xiàn)在可以從任何組件——無論是類組件或者函數(shù)組件返回null了。
● ?改進(jìn)對(duì)svg的支持
現(xiàn)在React將完全支持所有的SVG標(biāo)簽(不常見的SVG標(biāo)簽不會(huì)出現(xiàn)在React.DOM元素助手中全蝶,不過JSX和React.createElement適用于所有的標(biāo)簽名)闹蒜,并支持瀏覽器實(shí)現(xiàn)的所有SVG屬性。
關(guān)鍵性變動(dòng)
● ?React.cloneElement()現(xiàn)在包括defaultProps
修復(fù)了React.cloneElement()中的bug抑淫,如果cloneElement()接收到的某些props是undefined绷落,常返回帶有未定義值的元素。在React 15中始苇,我們將其修改為與createElement()保持一致∑鏊福現(xiàn)在任何發(fā)送給cloneElement()的未定義props都有相應(yīng)的組件defaultProps了。
● ?ReactPerf.getLastMeasurements()晦澀不明?
刪除的內(nèi)容
○ ?在9個(gè)月前的v0.14版本中催式,這些內(nèi)容已經(jīng)被標(biāo)記為將要移除的內(nèi)容:
從React頂層輸出中移除的API包括:findDOMNode函喉、render、renderToString荣月、renderToStaticMarkup以及unmountComponentAtNode管呵。在此提醒,這些API現(xiàn)在在ReactDOM和ReactDOMServer中可用哺窄。
○? 移除的插件包括:batchedUpdates以及cloneWithProps捐下。
○? 移除的組件實(shí)例方法包括:setProps顿天、replaceProps以及getDOMNode。
○ ?CommonJSreact/addons入口點(diǎn)也不再使用蔑担,在此提醒:可以使用單獨(dú)的react-addons-*軟件包來替代牌废,不過只適用于使用CommonJS軟件包時(shí)。
○? 將children發(fā)送給類似<input>之類的空元素的做法被取消了啤握,現(xiàn)在改成拋出異常鸟缕。
○? 在DOMrefs(例如this.refs.div.props)中使用React-specific屬性的做法也被刪除了。
新的警告提醒
● ?如果你使用精簡后的開發(fā)版排抬,React DOM會(huì)提示你使用速度更快的生產(chǎn)版懂从。
● ?React DOM:在指定沒有單位的CSS值為字符串時(shí),以后的版本將不會(huì)自動(dòng)添加px字樣蹲蒲。當(dāng)前的版本在此類情況下(比如編寫style={{width: '300'}})會(huì)發(fā)出警告番甩。類似width: 300這樣的無單位數(shù)據(jù)值不會(huì)被修改。
● ?目前在設(shè)置及訪問未作適當(dāng)清除的屬性時(shí)届搁,合成事件(Synthetic Events)會(huì)發(fā)出警告缘薛,并在事件返回到池中后,在訪問時(shí)發(fā)出提醒卡睦。 ?
● ?在嘗試從props讀取ref和key時(shí)宴胧,元素現(xiàn)在會(huì)發(fā)出提示。
● ?在構(gòu)造函數(shù)中表锻,若將不同的props對(duì)象發(fā)送給super()恕齐,React會(huì)發(fā)出提示。
● ?如果在getChildContext()中調(diào)用setState()瞬逊,則React會(huì)發(fā)出提示显歧。
● ?React DOM現(xiàn)在會(huì)提示DOM元素事件句柄鍵入錯(cuò)誤,比如onclick應(yīng)該是onClink确镊。
● ?React DOM現(xiàn)在會(huì)在style中提示NaN值士骤。
● ?如果在輸入內(nèi)容中指定了value和defaultValue,則React DOM現(xiàn)在會(huì)發(fā)出提示骚腥。
● ?如果輸入在受約束與不受約束之間切換敦间,則React DOM現(xiàn)在會(huì)發(fā)出提示。
● ?如果指定了onFocusIn或onFocusOut handler束铭,則React DOM現(xiàn)在會(huì)發(fā)出提示廓块,因?yàn)樵赗eact中這兩者沒有必要出現(xiàn)。
● ?如果將無效回調(diào)作為ReactDOM render()契沫、this.setState()或this.forceUpdate()的最后一個(gè)參數(shù)發(fā)送過去带猴,則React會(huì)輸出描述性的錯(cuò)誤信息。
● ?插件:如果嘗試在淺渲染中使用TestUtils.Simulate()懈万,則會(huì)輸出幫助性的消息拴清。
● ?PropTypes:arrayOf()與objectOf()會(huì)為無效參數(shù)提供更詳盡的錯(cuò)誤信息靶病。
其他優(yōu)化
● ?React現(xiàn)在使用loose-envify來代替envify,所以安裝的過度依賴較之前更少口予。
● ?淺渲染器暴露getMountedInstance()娄周。
● ?淺渲染器從render()返回渲染輸出結(jié)果。
● ?在以前的環(huán)境中沪停,React對(duì)于Object.create及Object.freeze是依賴ES5 shams的煤辨,現(xiàn)在仍是如此荐吉,但在相關(guān)環(huán)境中需要提供ES5 shams雅镊。
● ?React DOM支持名稱以數(shù)字開頭的react- 屬性。
● ?React DOM為類似Draft.js之類用React管理contentEditable子集的組件添加了新的suppressContentEditableWarning耕挨。
● ?React改進(jìn)了createClass()在復(fù)雜參數(shù)中的性能表現(xiàn)舷礼。