之所以從react官網學習react,1是因為英語不好, 希望能有所改進,內容不保證對錯,只是自己的理解
更好的請參見
在react中使用jsx語法,可以把它理解為一種融合html與js的新語言,整個react都是由他構成
react的 唯一渲染出口應該就是
reactdom.render(
, document.getelementbyid('root')
);
react是從js的角度來看待程式的組成的, 通過js把一切資源組織起來執行. 為了在js中更方便的呼叫html渲染頁面,react使用jsx語法,來融合html和js
const element =( ;) //當jsx語法多行時,最好用()包裹
jsx 在經過babel編譯後, 會變成乙個普通的 js函式,也就是乙個js的物件了, babel編譯jsx成乙個react.createelement()呼叫,
const element = (
);這兩種寫法相等
const element = react.createelement(
'h1',
, 'hello, world!'
)
瀏覽器上dom的修改的成本是很大的,因為js是單執行緒迴圈,與**邏輯共有同一執行緒,因此頻繁修改會造成ui執行緒的卡頓感以及
js**執行的延遲,如果每次修改乙個dom樹上的乙個子元素而要全部新建替換整個dom就太低效了,理想的情況是只修改那個
子dom元素,這份工作實際上react幫我們通過演算法自動完成了,所以每次我們reder時候,從**邏輯上看好像是從新渲染整個
dom,而實際上內部演算法只是更新了改變的那部分.
上面提到的 elements被叫做react elements, 可以這麼理解, 對於react直譯器來說, 這種型別的變數 相當於一種描述(用來告訴直譯器應該如何渲染dom的外觀),這種變數生成成本特別低,只是一種描述,不是真正的dom元素(介面)
一般情況下,react都是渲染在乙個根dom元素上的
reactdom.render(
, document.getelementbyid('root')//根dom
);
react dom更新 dom是很有效率的,他的邏輯是比較這次新react elements與上次react element的差別,然後只更新對應dom,盡量最小代價的更新介面,這個虛擬在記憶體裡的react element實際上就是大名鼎鼎的虛擬dom,所以我們應該換一種角度來思考問題,想要什麼樣的介面取決於對應的model結構對映,而不是思考如何手動獲得dom引用然後修改這個dom元素的屬性來修改介面.
元件是react的一種組織形式,他像乙個函式,接受引數(prop)然後返回乙個react element,用來渲染介面
元件有兩種形式:
1 函式形式
function
welcome
(props)
h1>
;}
2 es6 class形式(有一些額外的功能,比如生命週期鉤子,state)
class
welcome
extends
react.component
h1>;}
}
const element =
name
="sara"
/>
;
當react 渲染這個react element時, 會解析attributes成為乙個物件prop傳入元件.
有幾個注意事項:1 react應該抽象成元件去思考所有要完成的功能,而且元件應該盡可能的細分成只實現乙個功能的模組,元件只完成它自己的職責,有關元件對外提供的prop中的屬性再設計的時候應該從元件本身角度考慮如何命名,而不是從使用場景上決定.
2 react應該遵循純函式設計思想,相同輸入,相同輸出,而不應該更改輸入值.同樣react中如果在子元件中 修改props.a這種基本型別,父元件的實參是不會被更改的,但是因為js的限制,對於props.b(乙個物件).a被修改上層也會被修改,所以應該極力避免.
react 官網筆記 06 狀態提公升
如果兩個相鄰的元件想要使用相同的state去渲染元件,要實現乙個元件內部的邏輯更改state也會讓相鄰元件的ui更改,就需要使用 狀態提公升 了,原理就是把model提公升到離他們最近的公共父元件中,通過props傳遞給子元件,但是遇到乙個問題,因為props是不應該被改變的,在子元件中無法通過se...
React 官網列子學習
除了接受輸入資料 通過this.props 元件還可以保持內部狀態資料 通過this.state 當乙個元件的狀態資料的變化,展現的標記將被重新呼叫render 更新。先看結構,下面是hook函式 hook函式 最早是指windows 系統下提供的一種用來替換dos 系統下的中斷的系統機制 現在則是...
React官網學習實踐 列表 Keys
渲染多樣的元件 const numbers 1,2,3,4,5 const listitems numbers.map number reactdom.render document.getelementbyid root 基礎列表元件 key的使用,都挺符合es6的物件的使用,也沒什麼好測試的了。...