005-React 組件簡介

React Components 簡介

component 意為組件蛉顽、零件,React帶給我們的并不是像jQuery那樣的眾多方便方法,而是一個全新的概念——組件化咪橙,我們的網(wǎng)站(或者 Web App)可以分化成一個個組件聂宾,就像現(xiàn)在修高樓一樣果善,先把各種龍骨在工廠生產(chǎn)好,再組裝系谐。例如巾陕,一個網(wǎng)站有導(dǎo)航欄,主體纪他,我們就把這兩個東西分開鄙煤,不在一個html中全部寫完,而是分開“制作”茶袒,甚至主體中的文章有標(biāo)題欄和正文梯刚,我們也可以將其組件化。

你問組件化有什么好處薪寓,至少在我們學(xué)習(xí)的過程中亡资,沒有好處澜共,甚至?xí)哟髮W(xué)習(xí)成本,但是試想锥腻,在一個大型項(xiàng)目嗦董,是不是組件化后更能檢測出問題和BUG呢,畢竟不需要在一個龐大的頁面中尋找錯誤了瘦黑。

第一個 React 組件

做一些小改變

開始寫組件之前展懈,我們先將之前的index.html中的JSX部分分離,以方便后續(xù)步驟:
Step1:在public目錄下新建app.jsx文件供璧;
Step2:將原index.html中的JSX代碼移動到進(jìn)app.jsx存崖;
Step3:將index.html<script>標(biāo)簽修改為:<script type="text/babel" src="app.jsx"></script>;
修改完成后,index.html文件應(yīng)該如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>React-1</title>
  <script src="https://unpkg.com/react@latest/dist/react.js"></script>
  <script src="https://unpkg.com/react-dom@latest/dist/react-dom.js"></script>
  <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
  <div id="app"></div>
  <script type="text/babel" src="app.jsx"></script>
</body>
</html>

我們新建的app.jsx應(yīng)該如下:

ReactDOM.render(
  <h1>Hello React</h1>,
  document.getElementById("app")
);

React.createClass();

現(xiàn)在我們開始編寫第一個React組件睡毒,React組件并不是由什么神奇的技巧變成的来惧,而是通過調(diào)用React.createClass();方法,生成一個組件演顾,并且將其賦給一個變量供搀,而那個變量就代表了我們的組件,(注意:React.createClass();中的React是React眾多模塊的一個钠至,它有很多方法給我們使用葛虐,與我們之前使用的ReactDOM模塊等同。) 例如我們在app.jsx中這樣寫:

var Words = React.createClass({
  render:function(){
    return (
      <div>
        <h1>Hello React Component</h1>
      </div>
    );
  }
});
ReactDOM.render(
  <Words/>,
  document.getElementById("app")
);

我們使用React.createClass();創(chuàng)建了一個組件棉钧,我們想讓這個組件有內(nèi)容屿脐,只需要在此方法中返回一個對象(Object),這個對象中使用render成員宪卿,并且給這個成員賦一個方法的诵,這個方法使用JSX返回一些內(nèi)容。這樣后佑钾,這個組件會準(zhǔn)備渲染(render)一個<div><h1>Hello React</h1></div> 西疤,這就是一個小組件,雖然沒用休溶,但是能體現(xiàn)React組件的思想代赁。然后我們把這些都賦給一個變量var Words

接著我們在ReactDOM.render()中使用這個組件兽掰,非常簡單芭碍,只需要使用<Words/>這樣既代表Words組件。我們在終端中使用node server.js禾进,開啟服務(wù)器監(jiān)聽3000端口豁跑,出現(xiàn)圖圖示則第一個組件創(chuàng)建成功!

window-8.png

現(xiàn)在我們在React.createClass();中添加一個<p>標(biāo)簽:

var Words = React.createClass({
  render:function(){
    return (
      <div>
        <h1>Hello React Component</h1>
        <p>This is a paragraph</p>
      </div>
    );
  }
});

刷新瀏覽器,出現(xiàn)如下:

window-9.png

我們并沒有在

ReactDOM.render(
  <Words/>,
  document.getElementById("app")
);

中添加任何內(nèi)容艇拍,而頁面卻渲染了p標(biāo)簽的內(nèi)容狐蜕,這是因?yàn)槲覀冊?code>React.createClass();的render方法中添加了,而我們在渲染<Words/>組件時卸夕,內(nèi)容就會自動被渲染层释。這就是組件的好處,我們要修改頁面的內(nèi)容或者功能時快集,只需要在相應(yīng)的組件中修改贡羔,這樣能大大提高我們的效率,雖然在這個很小的項(xiàng)目中還看不出來个初。

在 React.createClass(); 中需要注意的地方

創(chuàng)建組件中的render成員方法中乖寒,只允許返回一個根標(biāo)簽,你不能返回多個根標(biāo)簽院溺。

//正確楣嘁,只有一個根標(biāo)簽<div>
var Words = React.createClass({
  render:function(){
    return (
      <div>
        <h1>Hello React Component</h1>
        <p>This is a paragraph</p>
      </div>
    );
  }
});
//錯誤,根標(biāo)簽不唯一
var Words = React.createClass({
  render:function(){
    return (
        <h1>Hello React Component</h1>
        <p>This is a paragraph</p>
    );
  }
});

如果我們非要渲染兩個標(biāo)簽的內(nèi)容珍逸,那么我們只需要將他們放進(jìn)一個<div>標(biāo)簽即可逐虚;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谆膳,隨后出現(xiàn)的幾起案子叭爱,更是在濱河造成了極大的恐慌,老刑警劉巖漱病,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件买雾,死亡現(xiàn)場離奇詭異,居然都是意外死亡缨称,警方通過查閱死者的電腦和手機(jī)凝果,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睦尽,“玉大人,你說我怎么就攤上這事型雳〉狈玻” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵纠俭,是天一觀的道長沿量。 經(jīng)常有香客問我,道長冤荆,這世上最難降的妖魔是什么朴则? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮钓简,結(jié)果婚禮上乌妒,老公的妹妹穿的比我還像新娘汹想。我一直安慰自己,他們只是感情好撤蚊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布古掏。 她就那樣靜靜地躺著,像睡著了一般侦啸。 火紅的嫁衣襯著肌膚如雪槽唾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天光涂,我揣著相機(jī)與錄音庞萍,去河邊找鬼。 笑死忘闻,一個胖子當(dāng)著我的面吹牛钝计,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播服赎,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼葵蒂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了重虑?” 一聲冷哼從身側(cè)響起践付,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缺厉,沒想到半個月后永高,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡提针,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年命爬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辐脖。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡饲宛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗜价,到底是詐尸還是另有隱情艇抠,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布久锥,位于F島的核電站家淤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瑟由。R本人自食惡果不足惜絮重,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧青伤,春花似錦督怜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至擎厢,卻和暖如春究流,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背动遭。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工芬探, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厘惦。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓偷仿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宵蕉。 傳聞我的和親對象是個殘疾皇子酝静,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過程中的一些閱讀筆記羡玛,個人覺得該教程講解深入淺出别智,比目前大...
    leonaxiong閱讀 2,810評論 1 18
  • JSX 知識準(zhǔn)備 JSX 并不是一門全新的語言,僅僅是一個語法糖稼稿,允許開發(fā)者在javascript中編寫XML語言...
    艾倫先生閱讀 4,494評論 4 20
  • GUIDS 第一章 為什么使用React薄榛? React 一個提供了用戶接口的JavaScript庫。 誕生于Fac...
    jplyue閱讀 3,519評論 1 11
  • 目前让歼,react組件有三種寫法敞恋,分別是es5的createClass寫法,es6的class寫法谋右,以及statel...
    ZoomFunc閱讀 1,618評論 0 1
  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,048評論 2 35