這篇“React虛擬DOM中常用術(shù)語有哪些”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“React虛擬DOM中常用術(shù)語有哪些”文章吧。
在德惠等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營(yíng)銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),德惠網(wǎng)站建設(shè)費(fèi)用合理。
在React的所有術(shù)語中,有五種核心類型是需要我們記住的。這五種類型分別是
ReactElement / ReactElement Factory
ReactNode
ReactComponent / ReactComponent Class
下面我們分別來看這五種類型
React Element
在React中主要的虛擬DOM的類型就是ReactElement。ReactElement有四種屬性,分別是:type,props,key和ref。它沒有封裝的內(nèi)部方法,并且原型上面什么都沒有。
該類型我們可以通過React.createElement來創(chuàng)建。
var root = React.createElement('div');
為了可以渲染成一個(gè)新的DOM樹,我們可以創(chuàng)建ReactElement類型的元素,并且將這些元素傳遞給ReactDOM.render方法進(jìn)行渲染。當(dāng)然這些ReactElement也可以帶有正規(guī)的DOM元素(其中包括HTML元素和SVG元素等等)。
通常情況下我們不要把ReactElement和真實(shí)的DOM元素相混淆。一個(gè)ReactElement是一個(gè)輕型的無狀態(tài)的不可變的元素,它是一個(gè)虛擬的DOM元素。其中渲染方法如下代碼
ReactDOM.render(root,document.getElementById(‘content’));
如果我們想在ReactElement上面加屬性的話,我們可以將屬性對(duì)象作為createElement方法的第二個(gè)參數(shù),然后其孩子節(jié)點(diǎn)可以作為第三個(gè)參數(shù)。
var child = React.createElement('li', null, 'Text Content');
var root = React.createElement('ul', { className: 'my-list' }, child);
ReactDOM.render(root, document.getElementById('example'));
同樣,這些在《React.createElement方法使用詳解》這篇文章中均有介紹。
如果我們要使用React的JSX語法的話,這些ReactElement元素就可以像這樣創(chuàng)建。
var root =
二者創(chuàng)建出來的元素可以是認(rèn)為等價(jià)的。
Factories
ReactElement-factory 是一個(gè)簡(jiǎn)單的生成帶有特定類型屬性的ReactElement的工廠方法。React帶有一個(gè)內(nèi)置的幫助手冊(cè),以便于你很方便的創(chuàng)建這個(gè)工廠方法。如下所示
function createFactory(type) {
return React.createElement.bind(null, type);
}
createFactory方法為我們提供了一個(gè)很方便的創(chuàng)建ReactElement的方法,我們可以不再總是使用React.createElement(‘div’)來創(chuàng)建了。
var div = React.createFactory('div');
var root = div({ className: 'my-div' });
ReactDOM.render(root, document.getElementById('example'));
除此之外,React還內(nèi)置了標(biāo)準(zhǔn)HTML標(biāo)簽的工廠方法,例子如下
var root = React.DOM.ul({ className: 'my-list' },
React.DOM.li(null, 'Text Content')
);
React Nodes
一個(gè)React節(jié)點(diǎn)可以是下面的任何一種情況
· ReactElement
· string (aka ReactText)
· number (aka ReactText)
· Array of ReactNodes (aka ReactFragment)
React Components
當(dāng)然,我們?cè)谑褂肦eact的時(shí)候可以僅僅使用ReactElement,但是,如果你想充分的利用React的優(yōu)勢(shì)的話,那么你就必須考慮使用ReactComponents去封裝狀態(tài)化的組件。
一個(gè)ReactComponent類僅僅只是一個(gè)Javascript類
var MyComponent = React.createClass({
render: function() {
...
}
});
當(dāng)這個(gè)構(gòu)造方法被調(diào)用的時(shí)候,至少要使用render返回一個(gè)對(duì)象,也就是說在createClass的第一個(gè)參數(shù)中(我們看到是一個(gè)對(duì)象)必須有render。返回的這個(gè)對(duì)象就是指定的ReactComponent。關(guān)于React.createClass的使用我們可以參考《React入門 createClass使用說明》
var component = new MyComponent(props); // 千萬不要這樣寫
除了測(cè)試,最好不要這樣調(diào)用。把這個(gè)交給React來做,它會(huì)為你去實(shí)現(xiàn)的。
你可以將ReactComponent傳遞給createElement,這樣就可以得到一個(gè)ReactElement了。
var element = React.createElement(MyComponent);
或者也可以使用JSX語法
var element =
當(dāng)把element傳遞給ReactDOM.render的時(shí)候,React將會(huì)調(diào)用構(gòu)造方法去創(chuàng)建一個(gè)ReactComponent,示例如下
var component = ReactDOM.render(element, document.getElementById('example'));
如果你多次調(diào)用ReactDOM.render,并且傳遞給它的是相同類型的ReactElement還有相同的DOM元素容器。那么它們將會(huì)返回相同的實(shí)例對(duì)象。并且這個(gè)實(shí)例是有狀態(tài)的。
var componentA = ReactDOM.render(
var componentB = ReactDOM.render(
componentA === componentB; // true
這就是為什么你不要自己去構(gòu)造實(shí)例化對(duì)象。反之,ReactElement在它被構(gòu)造出來之前是一個(gè)虛擬的ReactComponent組件。原先的ReactElement和新的ReactElement會(huì)進(jìn)行對(duì)比,看是否需要?jiǎng)?chuàng)建新的ReactComponent組件?;蛘咴却嬖诘氖欠裥枰匦率褂谩?/p>
以上就是關(guān)于“React虛擬DOM中常用術(shù)語有哪些”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。