摘要:而我只知道有自己的虛擬,它會(huì)對(duì)比虛擬和真實(shí)的差別,然后在適當(dāng)?shù)臅r(shí)機(jī)更新頁(yè)面。函數(shù)的第一個(gè)參數(shù)只能是一個(gè)標(biāo)簽,不能是并列的兩個(gè)標(biāo)簽。第一個(gè)添加了的屬性,該屬性值指向,意思是該組件名為的靜態(tài)屬性。
網(wǎng)頁(yè)總是一個(gè)鏈接著另一個(gè)的,React一大優(yōu)勢(shì)在于每次鏈接到另一個(gè)頁(yè)面上去的時(shí)候,不需要向傳統(tǒng)頁(yè)面一樣,得銷毀所有代碼,重新渲染新頁(yè)面的代碼,而只在一個(gè)頁(yè)面上展現(xiàn)新的內(nèi)容——單頁(yè)頁(yè)面。
React另一個(gè)優(yōu)勢(shì)是,以往的單頁(yè)頁(yè)面你需要考慮哪個(gè)元素要被刪除、哪個(gè)元素的行為要被修改,而我們只需要告訴React我們想要的最終頁(yè)面的效果,React會(huì)自動(dòng)幫我們處理頁(yè)面上的元素,做刪除、修改等操作。
而我只知道React有自己的虛擬DOM,它會(huì)對(duì)比虛擬DOM和真實(shí)DOM的差別,然后在適當(dāng)?shù)臅r(shí)機(jī)更新頁(yè)面。至于它怎么對(duì)比的?怎么知道差別的?怎么進(jìn)行修改的?我不知道,不過(guò),對(duì)于我們,誰(shuí)在乎呢?
必須首先知道的關(guān)于React的術(shù)語(yǔ)JSX語(yǔ)法:React特有語(yǔ)法,用來(lái)搭建虛擬DOM
組件(Component):一個(gè)個(gè)代碼塊,用來(lái)封裝各種功能,可以類比于函數(shù)(function)
props&status:組件的所有靜態(tài)屬性 & 所有動(dòng)態(tài)屬性
引入React想要使用React,你需要先引入:
上面兩個(gè)引入了React的核心庫(kù),最后一句引入jsx語(yǔ)法編譯器,因?yàn)闉g覽器不懂jsx只知道javascript,所以,引入編譯器轉(zhuǎn)換為瀏覽器能懂的javascript語(yǔ)言
請(qǐng)參考React官方文檔以獲取最新版本React的引入:https://reactjs.org/docs/add-...
初步使用React并沒(méi)有什么特別的技巧,先看代碼,再做解釋:
React First Try
解釋:
首先引入了三個(gè)
新建一個(gè)元素
我們必須在一個(gè)
像一般的javascript語(yǔ)法一樣,我們先獲取頁(yè)面元素
var container = document.querySelector("#container");
修改虛擬DOM,并渲染真實(shí)DOM
其中,ReactDOM.render();就是在渲染,其含義是將第一個(gè)參數(shù)渲染到第二個(gè)參數(shù)下。而第一個(gè)參數(shù)
ReactDOM.render(, container );Batman
catwoman
效果、頁(yè)面結(jié)構(gòu)
我們看到,頁(yè)面中已經(jīng)添加了包含兩個(gè)
元素的 上面的方法是直接將你想要的寫在React.render()里,通常的做法是引用組件
定義一個(gè)組件
組件里可以添加很多功能,比如想要添加一個(gè)按鈕,你只需直接寫你想要的DOM結(jié)構(gòu),而不需要使用javascript語(yǔ)法:createElement()、appendChild()等
在組件里寫好你想要的東西,使用React.render()進(jìn)行渲染
完整代碼可以如下 效果、頁(yè)面結(jié)構(gòu) 我們看到,頁(yè)面上出現(xiàn)了我們想要的按鈕,頁(yè)面結(jié)構(gòu)里也成功添加了標(biāo)簽。注意!??!組件名首字母必須大寫?。?!引用組件注意代碼<組件名/>,一個(gè)符號(hào)都不能錯(cuò)的?。?!
props用來(lái)獲取組件的靜態(tài)屬性,可以先看下面的一個(gè)小例子: 不必驚慌,修改的地方只有組件的render()和實(shí)際渲染的render()兩個(gè)函數(shù)。 第一個(gè)render()添加了的type屬性,該屬性值指向{this.props.buttontype},意思是該組件名為buttontype的靜態(tài)屬性。這個(gè)render()還將的顯示文字指向{this.props.children},意思是該組件的子元素這個(gè)靜態(tài)屬性 第二個(gè)render()函數(shù)添加了
結(jié)論就是:在渲染真實(shí)DOM的時(shí)候,會(huì)創(chuàng)建一個(gè)標(biāo)簽,它的type屬性值為submit,文字顯示為Batman
效果、頁(yè)面結(jié)構(gòu),哈哈哈,沒(méi)啥區(qū)別,沒(méi)區(qū)別就對(duì)了: props只能從父元素向下傳遞給子元素: 當(dāng)有多個(gè)屬性你想傳遞的時(shí)候,你的代碼可能就會(huì)是這樣的,會(huì)重復(fù)很多遍{this.props.propsName}: 如果你不想重復(fù)很多遍繁瑣的{this.props.propsName},那你可以使用擴(kuò)展運(yùn)算符...表示取到所有的靜態(tài)屬性并且都使等于{this.props.propsName},所以我們的代碼可以稍作簡(jiǎn)化:class 組件名 extends React.Component(
//your code
);
class 組件名 extends React.Component(
render(){
return ();
}
);
React.render(
<組件名/>,
想要渲染的位置
)