React如此強大的原因之一就在于它推行聲明式編程范式
1.
理解該問題的簡方式是:命令式編程描述代碼如何工作,而
聲明式編程則表明想要實現(xiàn)什 么目的。
與命令式世界極其相似的一個真實示例就是去酒吧喝啤酒并對服務(wù)員做出以下指示:
? ?從架子上拿一個玻璃杯;
? ? 將杯子放到酒桶前; ?
? ? 按下酒桶開關(guān),將杯子倒?jié)M; ??
? ? 把杯子遞給我。
但在聲明式世界中,你只需要說:“請給我一杯啤酒?!?/p>
按聲明式方式點一杯啤酒,需要假設(shè)服務(wù)員知道如何提供啤酒,這是聲明式編程工作原理的 一個重要方面。
2.
React 遵循聲明式范式,因此
無須告訴它如何與 DOM 交互。你只要聲明希望 在屏幕上看到的內(nèi)容,
React就會完成剩下的工作
3.
開發(fā) React的工程師一直在社區(qū)中推廣另一個概念:
將樣式的邏輯也放到組件中。
這 個概念頗具爭議,而且很難被接受。
基礎(chǔ)
4.常見誤解
一種常見的觀點認為,React是一個龐大的技術(shù)和工具集,要想使用它,就必須與包管理器、 轉(zhuǎn)譯器、模塊打包器以及無數(shù)的庫打交道。?
但 React其實是一個很小的庫。像之前使用 jQuery或 Backbone 那樣,我們可以在任何頁面(甚至 JSFiddle)中使用它:只要在關(guān)閉主體元素前引入腳本即可。?
實際需要引入兩個腳本,因為 React拆分成了兩個包:核心包 react 實現(xiàn)了 React庫的核心 特性,react-dom 則包含了與瀏覽器相關(guān)的所有特性。這樣做的理由是,核心包可以用于支持 不同的目標平臺,如瀏覽器中的 React DOM以及移動設(shè)備上的 React Native。
開發(fā)過程需要什么,引入相應(yīng)的什么包? 或 庫 或 管理器
5.react基礎(chǔ)原則
5.1 react界面完全由數(shù)據(jù)驅(qū)動
5.2 react中一切都是組件
5.3 props是react組件間通訊的基本方式
6.組件的地位
組件為react里的一等公民,公民們用props交流,當跨越多級聊天,全局變量?危害極大
業(yè)界往往采用第三方數(shù)據(jù)管理工具-----Redux與Mobx等
但react也提供了自己的跨組件通訊方式------Context
7.react組件用法
React 提供了兩種方式來聲明組件,一種是函數(shù)式,一種是類式。?
函數(shù)式很簡單,就像我們平常寫函數(shù)一樣,接受一個參數(shù)作為輸入,然后進行相應(yīng)的輸出,只不過它輸出的jsx.
// welcome 函數(shù)式組件。
function Welcome(props) {
? ? ? ? ?return <h1> {props.name}</h1>
}
類式,則是利用es6 class 語法, 我們所有的組件都繼承自React.Component.
classWelcomeextendsReact.Component{
? ?render() {
? ? ? ? ?return? <h1> {this.props.name}</h1>? }
}
聲明組件以后,怎么使用這個組件? 如果組件還要接受參數(shù),怎樣進行參數(shù)傳遞? 把組件想成一個html標簽就可以了,html標簽怎么使用,組件就怎么使用。html標簽有兩種使用方式,一種是 img 自閉合標簽<img />,一種是 h1之類的雙標簽<h1></h1>。同理,組件也有這兩種使用方式。傳參則像是給html標簽寫屬性,屬性名 = 屬性值,如name =”Jason” , 組件內(nèi)部的props 則把這些屬性組合在一起形成對象{name: “jason”}
<Welcome name="Jason" /> // 標簽一定要閉合,就是后面的/不能忘記
<Welcome></Welcome>
使用組件,它返回了 <h1> Jason</h1>, 很像html 代碼,其實它是 React 所說的虛擬DOM,? 并不是真實的DOM, 我們要把虛擬DOM 渲染成真實的DOM,才能顯示到頁面中,這需要用到ReactDOM的render 方法,它接受的第一個參數(shù),就是虛擬DOM, 第二個參數(shù)就是我們要把DOM 渲染到什么地方。
ReactDOM.render(
? ? <Welcome name="Jason" />,
? ? document.getElementById('root')
);
8.屬性-pros用法
Props是屬性。屬性不可以修改,也就是屬性不可以由組件進行修改,組件的屬性是由父組件傳遞過來的,相當于組件在出生的時候就存在的。
為什么要用pros?
我的理解就是從外部傳入一個值,這個值可以是字符串,數(shù)組,對象等,然后根據(jù)組件的功能來使用這個值或者顯示這個值,這是自定義組件內(nèi)部做的事情。簡單來說,就是通過pros傳遞值,然后去使用它。但是這個值不能被修改。
9.狀態(tài)-state的使用
使用this.state來引用,狀態(tài)指的是事物所處的狀況。?
由事物自行處理、不斷變化的。它是事物的私有屬性。狀態(tài)是可以改變的。?
為什么要用狀態(tài)??
在組件本身維護了一個私有的狀態(tài),當狀態(tài)發(fā)生改變時,能及時更新狀態(tài),及時渲染改變后的頁面。
狀態(tài)只和組件本身相關(guān),組件不能修改屬性。?
組件在運行時需要修改的數(shù)據(jù)就是狀態(tài)。
簡單來說就是:?
組件在運行時需要修改的數(shù)據(jù)就是狀態(tài)。?
屬性的核心要點就是不能修改!