深入React技術(shù)棧:初入React世界

React簡介

  • 專注視圖層
    沒有用過react也應(yīng)該有所耳聞react僅僅專注于view層交洗,提供簡潔的視圖層解決方案。與模板引擎有一點(diǎn)不同的地方就是橡淑,react不僅專注解決view層的問題构拳,它又是一個(gè)包括view和controller的庫。

  • 虛擬DOM(virtual Dom)
    在JS中梁棠,DOM將HTML解析為一個(gè)具有層次性的DOM樹置森,在傳統(tǒng)的開發(fā)模式中,操作DOM符糊,更新視圖凫海,這些操作都是很耗費(fèi)瀏覽器性能,因?yàn)樾阅芎馁M(fèi)最大的就是操作DOM了男娄。在React中行贪,是把真實(shí)的DOM轉(zhuǎn)換成JavaScript對象樹,也就是所謂的虛擬DOM模闲。

在每次數(shù)據(jù)改變后建瘫,react有一個(gè)diff算法,可以重寫計(jì)算virtual dom(也就是JavaScript對象樹)尸折,和上一次的virtual dom進(jìn)行對比啰脚,然后對發(fā)生變化的部分進(jìn)行批量更改。注意:對比DOM也是需要花費(fèi)性能的翁授。

  • 函數(shù)式編程
    先說下什么叫做命令式編程拣播,命令式編程是解決做什么的問題,就好像是下命令式的收擦。函數(shù)式編程則對應(yīng)的是聲明式編程贮配。react則是將不斷聲明,不斷重復(fù)構(gòu)建的ui抽象成組件塞赂,在特定的參數(shù)下渲染ui界面泪勒。

JSX語法

React為了方便view層組件化,承載了構(gòu)建HTML結(jié)構(gòu)化頁面的職責(zé)宴猾。react主要是通過創(chuàng)建和更新虛擬元素來管理整個(gè)virtual DOM的圆存。

虛擬元素,可以理解為真實(shí)元素的對應(yīng)仇哆。其構(gòu)建和更新都是在內(nèi)存中完成沦辙。在react中創(chuàng)建的虛擬元素可以分為兩類:

  1. DOM元素 --- 對應(yīng)元素DOM元素
  2. 組件元素 --- 對應(yīng)自定義元素
  • DOM元素

我們使用JavaScript來描述頁面中的DOM元素,這些元素可以簡單的被描述為純粹的JSON對象讹剔,如下:

   <button type="button" class="btn btn-default">
       <em>Confirm</em>
   </button>

其中包括了元素的類型和屬性油讯,如果轉(zhuǎn)為JSON對象:

{
        type: 'button',
        props: {
            className: 'btn btn-default',
            children: {
                type: 'em',
                props: {
                    children: 'Confirm'
                }
            }
        }
    }
這樣我們就可以在JavaScript中創(chuàng)建virtual DOM元素了详民。
  • 組件元素
    我們可以將上面的button元素進(jìn)行封裝,得到一種構(gòu)建按鈕的公共方法:
const Button = ({color, text}) => {
        return {
            type: button,
            props: {
                className: `btn btn-${color}`,
                children: {
                    type: 'em',
                    props:{
                        children: text
                    }
                }
            }
        }
    }

我們可以換一種思維考慮陌兑,以上的Button方法其實(shí)也可以作為元素存在沈跨,方法名對應(yīng)了元素類型,參數(shù)對應(yīng)了DOM元素屬性兔综,所以這樣構(gòu)建的元素就是自定義類型元素或者是組件元素饿凛。
這也是react的核心思想之一,因?yàn)橛泄驳谋磉_(dá)方法软驰,我們可以讓層層嵌套的元素封裝成組件涧窒,然后用遞歸渲染的方式進(jìn)行構(gòu)建DOM樹。

如下看更深層次的嵌套:

const DangerButton = (text) => ({
        type: Button,
        props: {
            color: 'red',
            children: text
        }
    })
    
    const DeletAccount = () => ({
        type: 'div',
        props: {
            children: [
                {
                    type: 'p',
                    props: {children: 'are you sure?'}
                },
                {
                    type: DangerButton,
                    props: {children: 'Confirm'}
                },
                {
                    type: Button,
                    props: {
                        color: 'red',
                        children: text
                    }
                }
            ]
        }
    })

以上我們可以看到實(shí)現(xiàn)的一個(gè)提示語和兩個(gè)按鈕的功能模塊碌宴,可以見得這樣的寫法是很難以接受的杀狡,那么我們需要HTML的寫法來提供支持,所以產(chǎn)生了JSX語法贰镣。

const DeletAccount = () => (
        <div>
            <p>are you sure?</p>
            <DangerButton>Confirm</DangerButton>
            <Button color='blue'>Cancle</Button>
        </div>
    )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呜象,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碑隆,更是在濱河造成了極大的恐慌恭陡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件上煤,死亡現(xiàn)場離奇詭異休玩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)劫狠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門拴疤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人独泞,你說我怎么就攤上這事呐矾。” “怎么了懦砂?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵蜒犯,是天一觀的道長。 經(jīng)常有香客問我荞膘,道長罚随,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任羽资,我火速辦了婚禮淘菩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屠升。我一直安慰自己潮改,他們只是感情好费奸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著进陡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪微服。 梳的紋絲不亂的頭發(fā)上趾疚,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音以蕴,去河邊找鬼糙麦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丛肮,可吹牛的內(nèi)容都是我干的赡磅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼宝与,長吁一口氣:“原來是場噩夢啊……” “哼焚廊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起习劫,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤咆瘟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诽里,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袒餐,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年谤狡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灸眼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墓懂,死狀恐怖焰宣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拒贱,我是刑警寧澤宛徊,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站逻澳,受9級特大地震影響闸天,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斜做,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一苞氮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓤逼,春花似錦笼吟、人聲如沸库物。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戚揭。三九已至,卻和暖如春撵枢,著一層夾襖步出監(jiān)牢的瞬間民晒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工锄禽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潜必,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓沃但,卻偏偏與公主長得像磁滚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子宵晚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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