摘要:中的每一個(gè)組件都是一個(gè)狀態(tài)機(jī),通常情況下,我們通過設(shè)置組件的狀態(tài)就可以完成的更新,但是在某些情況下確實(shí)需要直接操作。只在組件中調(diào)用,組件就是已經(jīng)渲染在瀏覽器結(jié)構(gòu)中的組件。
React中的每一個(gè)組件都是一個(gè)狀態(tài)機(jī),通常情況下,我們通過設(shè)置組件的狀態(tài)就可以完成UI的更新,但是在某些情況下確實(shí)需要直接操作DOM。
React中操作DOM的方法:
Refs
findDOMNode()
findDOMNode()當(dāng)組件加載到頁(yè)面上之后(mounted),你就可以通過 getDOMNode() 方法拿到組件對(duì)應(yīng)的 DOM 元素。
React.findDOMNode()只在mounted組件中調(diào)用,mounted組件就是已經(jīng)渲染在瀏覽器DOM結(jié)構(gòu)中的組件。如果你在組件的render()方法中調(diào)用React.findDOMNode()就會(huì)拋出異常。Refs
通過在要引用的 DOM 元素上面設(shè)置一個(gè) ref 屬性指定一個(gè)名稱,然后通過 this.refs.name 來訪問對(duì)應(yīng)的 DOM 元素。
比如有一種情況是必須直接操作 DOM 來實(shí)現(xiàn)的,你希望一個(gè) 元素在你清空它的值時(shí) focus,你沒法僅僅靠 state 來實(shí)現(xiàn)這個(gè)功能。
class App extends Component { constructor() { return { userInput: "" }; } handleChange(e) { this.setState({ userInput: e.target.value }); } clearAndFocusInput() { this.setState({ userInput: "" }, () => { this.refs.theInput.focus(); }); } render() { return (); } }Click to Focus and Reset
如果ref 是設(shè)置在原生 HTML 元素上,它拿到的就是 DOM 元素,如果設(shè)置在自定義組件上,它拿到的就是組件實(shí)例,這時(shí)候就需要通過 findDOMNode來拿到組件的 DOM 元素。
因?yàn)闊o狀態(tài)組件沒有實(shí)例,所以 ref 不能設(shè)置在無狀態(tài)組件上,一般來說這沒什么問題,因?yàn)闊o狀態(tài)組件沒有實(shí)例方法,不需要 ref 去拿實(shí)例調(diào)用相關(guān)的方法,但是如果想要拿無狀態(tài)組件的 DOM 元素的時(shí)候,就需要用一個(gè)狀態(tài)組件封裝一層,然后通過 ref 和 findDOMNode 去獲取。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79864.html
摘要:配置默認(rèn)和中的操作并不能完全滿足所有操作需求,有些時(shí)候還是需要和打交道。當(dāng)中提供了屬性來幫助我們獲取已經(jīng)掛載元素的節(jié)點(diǎn)。當(dāng)元素在頁(yè)面上掛載完成以后,就會(huì)調(diào)用這個(gè)函數(shù),并且把這個(gè)掛載以后的節(jié)點(diǎn)傳給這個(gè)函數(shù)。 配置默認(rèn) defaultProps class ExampleComponent extends React.Component{ static defaultProps =...
摘要:只因技術(shù)種類繁雜眾多層出不窮,程序員只有靠不斷的學(xué)習(xí)才能不落后于技術(shù),被工作淘汰。特此推薦給大家。 99%的程序員每天都是先學(xué)習(xí),后工作,不然完成不了工作。只因技術(shù)種類繁雜眾多、層出不窮,程序員只有靠不斷的學(xué)習(xí)才能不落后于技術(shù),被工作淘汰。我就是這其中一員,深得體會(huì)其中的「疼并快樂」,在...
摘要:配置在第一次使用小猿之前,需要配置印象筆記的開發(fā)者令牌。小猿在被激活后會(huì)執(zhí)行一次這個(gè)命令,并且將以上內(nèi)容緩存到內(nèi)存中。建議與改進(jìn)小猿是一個(gè)開源項(xiàng)目,歡迎廣大印象筆記和的愛好者的反饋以及。 印象猿 印象猿(EverMonkey)是一款 VSCode 插件。使用小猿可以讓你在 VSCode 中使用 Markdown 編輯,創(chuàng)建,更新印象筆記。 安裝 打開 VSCode,在擴(kuò)展商店中搜索 e...
摘要:讓你能夠像使用本地文件一樣使用印象筆記。支持流行的格式的筆記,印象筆記中完美顯示,上傳重新下載筆記仍為格式。三平臺(tái)支持,安裝即用,在平臺(tái)也流暢的使用印象筆記。在被限制期間登錄也會(huì)受限,所以會(huì)提示尚未登錄。 LocalNote showImg(https://badges.gitter.im/littlecodersh/LocalNote.svg); showImg(https://im...
閱讀 1982·2019-08-30 15:54
閱讀 3532·2019-08-30 15:52
閱讀 1822·2019-08-29 17:20
閱讀 2513·2019-08-29 17:08
閱讀 2346·2019-08-26 13:24
閱讀 780·2019-08-26 11:59
閱讀 2780·2019-08-23 14:50
閱讀 611·2019-08-23 14:20