2019-05-10 React小書 學(xué)習(xí)筆記(二)

狀態(tài)提升

  1. 當(dāng)某個(gè)狀態(tài)被多個(gè)組件依賴或影響時(shí),就該把狀態(tài)提升到最近公共父組件中管理,用props傳遞數(shù)據(jù)或函數(shù)來管理這種依賴或影響的行為.

如何更好的管理這種被多個(gè)組件依賴或影響的狀態(tài)?
Redux狀態(tài)管理工具


掛載階段的組件生命周期(一)

我們把 React.js 將組件渲染腾降,并且構(gòu)造 DOM 元素然后塞入頁面的過程稱為組件的掛載

掛載過程Demo
componentWillMount:組件掛載開始之前,也就是在render之前調(diào)用
componentDidMount:組件掛載完成后,也就是在DOM元素插入頁面后調(diào)用
componentWillUnmount:在組件對(duì)應(yīng)DOM元素從頁面中刪除之前調(diào)用


掛載階段的組件生命周期(二)

一般把組件的state的初始化工作放在constructor里去做,在componentWillMount進(jìn)行組件的啟動(dòng)工作,如果有數(shù)據(jù)清理就放在componentWillUnmount里面去做
時(shí)鐘Demo


更新階段的組件生命周期

更新階段:就是setState導(dǎo)致React重新渲染組件并把組件的變化應(yīng)用到DOM元素上的過程,這是一個(gè)組件變化的過程

補(bǔ)充關(guān)于更新階段的組件生命周期:

  1. shouldComponentUpdate(nextProps, nextState):你可以通過這個(gè)方法控制組件是否重新渲染链烈。如果返回 false 組件就不會(huì)重新渲染靖榕。這個(gè)生命周期在 React.js 性能優(yōu)化上非常有用根吁。
  2. componentWillReceiveProps(nextProps):組件從父組件接收到新的 props 之前調(diào)用。
  3. componentWillUpdate():組件開始重新渲染之前調(diào)用端盆。
  4. componentDidUpdate():組件重新渲染并且把更改變更到真實(shí)的 DOM 以后調(diào)用怀骤。

ref和react中的DOM操作

我們可以給任意代表 HTML 元素標(biāo)簽加上 ref 從而獲取到它 DOM 元素然后調(diào)用 DOM API。但是記住一個(gè)原則:能不用 ref 就不用爱谁。特別是要避免用 ref 來做 React.js 本來就可以幫助你做到的頁面自動(dòng)更新的操作和事件監(jiān)聽晒喷。多余的 DOM 操作其實(shí)是代碼里面的“噪音”孝偎,不利于我們理解和維護(hù)访敌。


props.children和容器類組件

demo
嵌套的結(jié)構(gòu)在組件內(nèi)部都可以通過 props.children 獲取到,這種組件編寫方式在編寫容器類型的組件當(dāng)中非常有用衣盾。


dangerouslySetHTML和style屬性

demo
設(shè)置 innerHTML 可能會(huì)導(dǎo)致跨站腳本攻擊(XSS)寺旺,所以 React.js 團(tuán)隊(duì)認(rèn)為把事情搞復(fù)雜可以防止(警示)大家濫用這個(gè)屬性。這個(gè)屬性不必要的情況就不要使用势决。

<h1 style={{fontSize: '12px', color: 'red'}}>React.js 小書</h1>

style 接受一個(gè)對(duì)象阻塑,這個(gè)對(duì)象里面是這個(gè)元素的 CSS 屬性鍵值對(duì),原來 CSS 屬性中帶 - 的元素都必須要去掉 - 換成駝峰命名果复,如 font-size 換成 fontSize陈莽,text-align 換成 textAlign。
用對(duì)象作為 style 方便我們動(dòng)態(tài)設(shè)置元素的樣式虽抄。我們可以用 props 或者 state 中的數(shù)據(jù)生成樣式對(duì)象再傳給元素走搁,然后用setState 就可以修改樣式,非常靈活


PropTypes 和組件參數(shù)驗(yàn)證

通過 PropTypes 給組件的參數(shù)做類型限制迈窟,可以在幫助我們迅速定位錯(cuò)誤私植,這在構(gòu)建大型應(yīng)用程序的時(shí)候特別有用;另外车酣,給組件加上 propTypes曲稼,也讓組件的開發(fā)、使用更加規(guī)范清晰湖员。

這里建議大家寫組件的時(shí)候盡量都寫 propTypes贫悄,有時(shí)候有點(diǎn)麻煩,但是是值得的娘摔。


我們?cè)谏弦浑A段的評(píng)論功能基礎(chǔ)上加上以下功能需求:

  1. 頁面加載完成自動(dòng)聚焦到評(píng)論輸入框窄坦。
  2. 把用戶名持久化,存放到瀏覽器的 LocalStorage 中。頁面加載時(shí)會(huì)把用戶名加載出來顯示到輸入框嫡丙,用戶就不需要重新輸入用戶名了拴袭。
  3. 把已經(jīng)發(fā)布的評(píng)論持久化,存放到瀏覽器的 LocalStorage 中曙博。頁面加載時(shí)會(huì)把已經(jīng)保存的評(píng)論加載出來拥刻,顯示到頁面的評(píng)論列表上。
  4. 評(píng)論顯示發(fā)布日期父泳,如“1 秒前”般哼,”30 分鐘前”,并且會(huì)每隔 5 秒更新發(fā)布日期惠窄。
  5. 評(píng)論可以被刪除蒸眠。
  6. 類似Markdown 的行內(nèi)代碼塊顯示功能,用戶輸入的用 `` 包含起來的內(nèi)容都會(huì)被處理成用 <code> 元素包含杆融。例如輸入 console.log 就會(huì)處理成 <code>console.log</code> 再顯示到頁面上楞卡。

記錄下開發(fā)的流程:
1 聚焦評(píng)論框(focus())
2 持久化用戶名(在 handleUsernameBlur 中我們把用戶輸入的內(nèi)容傳給了 _saveUsername 私有方法(所有私有方法都以 _ 開頭)。)
3 持久化評(píng)論(JSON.stringify()-JSON.parse())
4 顯示評(píng)論發(fā)布時(shí)間(timeString , duration)
5 可以刪除評(píng)論
6 利用正則添加代碼塊顯示功能如 ``

comment-app-v2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脾歇,一起剝皮案震驚了整個(gè)濱河市蒋腮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藕各,老刑警劉巖池摧,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異激况,居然都是意外死亡作彤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門乌逐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竭讳,“玉大人,你說我怎么就攤上這事黔帕〈蹋” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵成黄,是天一觀的道長(zhǎng)呐芥。 經(jīng)常有香客問我,道長(zhǎng)奋岁,這世上最難降的妖魔是什么思瘟? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮闻伶,結(jié)果婚禮上滨攻,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好光绕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布女嘲。 她就那樣靜靜地躺著,像睡著了一般诞帐。 火紅的嫁衣襯著肌膚如雪欣尼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天停蕉,我揣著相機(jī)與錄音愕鼓,去河邊找鬼。 笑死慧起,一個(gè)胖子當(dāng)著我的面吹牛菇晃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚓挤,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼磺送,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了屈尼?” 一聲冷哼從身側(cè)響起册着,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤拴孤,失蹤者是張志新(化名)和其女友劉穎脾歧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體演熟,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞭执,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芒粹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兄纺。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖化漆,靈堂內(nèi)的尸體忽然破棺而出估脆,到底是詐尸還是另有隱情,我是刑警寧澤座云,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布疙赠,位于F島的核電站,受9級(jí)特大地震影響朦拖,放射性物質(zhì)發(fā)生泄漏圃阳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一璧帝、第九天 我趴在偏房一處隱蔽的房頂上張望捍岳。 院中可真熱鬧,春花似錦、人聲如沸锣夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽银萍。三九已至泞坦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砖顷,已是汗流浹背贰锁。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滤蝠,地道東北人豌熄。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像物咳,于是被迫代替她去往敵國和親锣险。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360