摘要:虛擬之所以快,是因?yàn)樗恢苯硬僮?。此外,?shí)現(xiàn)了一套完整的事件合成機(jī)制,能夠保持事件冒泡的一致性,跨瀏覽器執(zhí)行。大部分情況下,我們都是在構(gòu)建的組件,也就是操作虛擬。例如就表示組件被插入之前。組件更新后執(zhí)行組件被移除前執(zhí)行獲取真實(shí)的強(qiáng)制更新
React對底層的代碼作了封裝,在大多數(shù)情況下,我們不需要直接去操作DOM。但是有時(shí)候我們還是需要使用到底層的代碼的,比如輸入框獲取焦點(diǎn),這個(gè)時(shí)候可以通過第三方的類庫或者React提供的API實(shí)現(xiàn)。
虛擬DOMReact之所以快,是因?yàn)樗恢苯硬僮鱀OM。React將DOM結(jié)構(gòu)存儲在內(nèi)存中,然后同render()的返回內(nèi)容進(jìn)行比較,計(jì)算出需要改動的地方,最后才反映到DOM中。
此外,React實(shí)現(xiàn)了一套完整的事件合成機(jī)制,能夠保持事件冒泡的一致性,跨瀏覽器執(zhí)行。甚至可以在IE8中使用HTML5的事件。
大部分情況下,我們都是在構(gòu)建React的組件,也就是操作虛擬DOM。但是有時(shí)候我們需要訪問底層的API,可能或通過使用第三方的插件來實(shí)現(xiàn)我們的功能,如jQuery。React也提供了接口讓我們操作底層API。
為了同瀏覽器交互,我們有時(shí)候需要獲取到真實(shí)的DOM節(jié)點(diǎn)。我們可以通過調(diào)用React的React.findDOMNode(component)獲取到組件中真實(shí)的DOM。
React.findDOMNode()只在mounted組件中調(diào)用,mounted組件就是已經(jīng)渲染在瀏覽器DOM結(jié)構(gòu)中的組件。如果你在組件的render()方法中調(diào)用React.findDOMNode()就會拋出異常。
看官方的示例:
var MyComponent = React.createClass({ handleClick: function() { // Explicitly focus the text input using the raw DOM API. React.findDOMNode(this.refs.myTextInput).focus(); }, render: function() { // The ref attribute adds a reference to the component to // this.refs when the component is mounted. return (組件的生命周期); } }); React.render(, document.getElementById("example") );
組件的生命周期主要由三個(gè)部分組成:
Mounting:組件正在被插入DOM中
Updating:如果DOM需要更新,組件正在被重新渲染
Unmounting:組件從DOM中移除
React提供了方法,讓我們在組件狀態(tài)更新的時(shí)候調(diào)用,will標(biāo)識狀態(tài)開始之前,did表示狀態(tài)完成后。例如componentWillMount就表示組件被插入DOM之前。
MountinggetInitialState():初始化state
componentWillMount():組件被出入DOM前執(zhí)行
componentDidMount():組件被插入DOM后執(zhí)行
UpdatingcomponentWillReceiveProps(object nextProps):組件獲取到新的屬性時(shí)執(zhí)行,這個(gè)方法應(yīng)該將this.props同nextProps進(jìn)行比較,然后通過this.setState()切換狀態(tài)
shouldComponentUpdate(object nextProps, object nextState):組件發(fā)生改變時(shí)執(zhí)行,應(yīng)該將this.props和nextProps、this.stats和nextState進(jìn)行比較,返回true或false決定組件是否更新
componentWillUpdate(object nextProps, object nextState):組件更新前執(zhí)行,不能在此處調(diào)用this.setState()。
componentDidUpdate(object prevProps, object prevState):組件更新后執(zhí)行
UnmountingcomponentWillUnmount():組件被移除前執(zhí)行
Mounted MethodsfindDOMNode():獲取真實(shí)的DOM
forceUpdate():強(qiáng)制更新
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91495.html
摘要:單向數(shù)據(jù)流數(shù)據(jù)一旦更新,會渲染整個(gè)。的渲染方式用戶輸入從獲取數(shù)據(jù)將數(shù)據(jù)傳給頂層組件將每個(gè)組件渲染出來由于是單向數(shù)據(jù)流,所以不會有雙向數(shù)據(jù)綁定數(shù)據(jù)模型的臟檢查確切的操作。 你覺得你用的react框架有什么特點(diǎn)呢? 1)使用jsx語法,可以在js中寫html。2)單向數(shù)據(jù)流:數(shù)據(jù)一旦更新,會渲染整個(gè)app。react的渲染方式: 用戶輸入 從API獲取數(shù)據(jù) 將數(shù)據(jù)傳給頂層組件 React將...
摘要:我們使用最基本的事就是用來展現(xiàn)數(shù)據(jù)。使得展現(xiàn)數(shù)據(jù)變得簡單,并且當(dāng)數(shù)據(jù)改變時(shí),能自動保持的更新。使用了內(nèi)部的虛擬,當(dāng)數(shù)據(jù)發(fā)生改變,先在虛擬中計(jì)算變化,最后將變動的部分反應(yīng)到真實(shí)的中??梢园阉醋饔兄蜖顟B(tài)并且可以返回結(jié)構(gòu)的函數(shù)。 我們使用UI最基本的事就是用來展現(xiàn)數(shù)據(jù)。React使得展現(xiàn)數(shù)據(jù)變得簡單,并且當(dāng)數(shù)據(jù)改變時(shí),React能自動保持UI的更新。 開始 創(chuàng)建一個(gè)簡單的Demo: ...
摘要:用于規(guī)范的類型與必需的狀態(tài)。表示由組件更改的數(shù)據(jù),通常是通過與用戶的交互來更改的。為了實(shí)現(xiàn)的修改,需要注冊事件處理程序到相應(yīng)的元素上。當(dāng)事件發(fā)生時(shí),將更新后的值是從中檢索,并通知組件。通常情況下,該函數(shù)初始化狀態(tài)使用,,或其他數(shù)據(jù)存儲。 前言 上一篇文章中,我們講到了JSX的一些用法和注意事項(xiàng),這次我們來講react中最基礎(chǔ)也是特別重要的內(nèi)容:組件。這篇文章包含組件的以下內(nèi)容:狀態(tài)、屬...
摘要:的數(shù)據(jù)劫持版本內(nèi)部使用了來實(shí)現(xiàn)數(shù)據(jù)與視圖的雙向綁定,體現(xiàn)在對數(shù)據(jù)的讀寫處理過程中。這樣就形成了數(shù)據(jù)的雙向綁定。 MVVM由以下三個(gè)內(nèi)容組成 View:視圖模板 Model:數(shù)據(jù)模型 ViewModel:作為橋梁負(fù)責(zé)溝通View和Model,自動渲染模板 在JQuery時(shí)期,如果需要刷新UI時(shí),需要先取到對應(yīng)的DOM再更新UI,這樣數(shù)據(jù)和業(yè)務(wù)的邏輯就和頁面有強(qiáng)耦合。 在MVVM中,U...
摘要:是程序的入口文件自動化測試定義組件擴(kuò)大點(diǎn)擊區(qū)域虛擬的生成數(shù)據(jù)模板數(shù)據(jù)模板生成虛擬虛擬就是一個(gè)對象,用它來描述真實(shí)損耗了性能用虛擬的結(jié)構(gòu)生成真實(shí)的來顯示發(fā)生變化數(shù)據(jù)模板生成新的虛擬極大提升了性能數(shù)據(jù)更新比較原始虛擬和新的虛擬的區(qū)別找到區(qū)別極大 Index.js是程序的入口文件 PWA progressive web application(registerServiceWorker) A...
閱讀 1371·2021-09-10 10:51
閱讀 2835·2019-08-30 15:54
閱讀 3377·2019-08-29 17:11
閱讀 936·2019-08-29 16:44
閱讀 1399·2019-08-29 13:47
閱讀 1095·2019-08-29 13:47
閱讀 1495·2019-08-29 12:23
閱讀 1052·2019-08-28 18:18