深入react技術(shù)棧(1)

第一章(基本介紹娶牌、JSX、React組件)

  • react是Facebook開源在github上的JavaScript庫。把用戶界面抽象成一個個組件适室。引用了JSX語法
虛擬DOM
  • react把真實DOM樹轉(zhuǎn)成JavaScript對象樹(虛擬DOM)勿负。
  • 虛擬DOM提升了react的性能馏艾。還方便和其他平臺集成。
  • react承載了構(gòu)建HTML結(jié)構(gòu)化頁面的職責(zé)奴愉。是通過創(chuàng)建與更新虛擬元素來管理整個虛擬DOM琅摩。
JSX
  • 用意在于通過加入增強語法,使JavaScript更快锭硼、安全房资、簡單。
  • 虛擬元素的構(gòu)建和更新都是在內(nèi)存中完成的檀头,并不會真正的渲染到DOM中去轰异。
  • react創(chuàng)建的虛擬元素分為DOM元素和組件元素兩種。分別對應(yīng)著原生DOM元素與自定義元素暑始。
  • 因為元素有公共的表達(dá)方法搭独,我們就可以讓元素們彼此嵌套或混合。這種層層封裝的組件元素就是所謂的react組件廊镜,最終可以用遞歸渲染的方式構(gòu)建出完全的DOM元素樹牙肝。
  • JXS是將HTML語法直接加入到JavaScript代碼中,再通過翻譯器轉(zhuǎn)換到純JavaScript后由瀏覽器執(zhí)行。
JSX基本語法
  • JSX是類XML語法的ECMAScript擴(kuò)展配椭,可以說虫溜,JSX基本語法被XML囊括,但也有些許不同
XML基本語法

+標(biāo)簽可以任意嵌套颂郎『鸲桑可以清晰地看到DOM樹狀結(jié)構(gòu)及其屬性。

const List = () =>(
    <div>
        <Title>title</Title>
        <ul>
            <li>list</li>
            <li>list</li>
        </ul>
    </div>
);
  • 注意
    • 定義標(biāo)簽時乓序,只允許被一個標(biāo)簽包裹寺酪。
    • 標(biāo)簽一定要閉合。
元素類型
  • HTML標(biāo)簽首字母為小寫替劈,對應(yīng)DOM元素寄雀;反之,則對應(yīng)組件元素陨献。
  • 依賴的組件中元素不再出現(xiàn)組件元素盒犹,就可以將完整的DOM樹構(gòu)建出來。
  • JSX還可以通過命名空間的方法使用組件元素眨业,可以解決組件命名沖突和對一組組件進(jìn)行歸類急膀。
  • 注釋
    • JSX中未定義注釋的轉(zhuǎn)換。不過在一個組件的子元素位置使用注釋要用{}包起來龄捡。
    const App={
        <Nav>
            {/* 節(jié)點注釋*/}
            <Person
            /* 多行
            注釋 */
            name={window.name}
        </Nav>
    }
元素屬性

在JSX中卓嫂,DOM和組件元素都有屬性。

  • DOM元素的屬性是標(biāo)準(zhǔn)規(guī)范化屬性聘殖,除了class和for晨雳。
    • class——className
    • for——HTMLFor
  • 組件元素的屬性是完全自定義的屬性。
  • Boolean屬性
    • 省略Boolean屬性值會導(dǎo)致JSX任務(wù)bool值設(shè)為了true奸腺。
  • 展開屬性
    • 如果事先不知道設(shè)置那些pros餐禁,最好不要設(shè)置⊥徽眨可以用ES6 rest/spread特性來提高效率
可以將
const data = {name:'foo',value:'bar'};
const component = <Component name={data.name} value={data.value} />;
寫為
const data = {name:'foo',value:'bar'};
const component = <Component {...data}/>;
  • 自定義HTML屬性
    + 如果在JSX中往DOM元素中傳入自定義屬性帮非,react不會渲染。若要使用讹蘑,要使用data-前綴末盔。
    + 在自定義標(biāo)簽中任意屬性都是被支持的。
    + 以aria-開頭的網(wǎng)絡(luò)無障礙屬性同樣可正常使用衔肢。
JavaScript屬性表達(dá)式
  • 屬性值要使用表達(dá)式庄岖,只要用{}替換""即可豁翎。
HTML轉(zhuǎn)義
React組件
  • 組件封裝的基本思路是面向?qū)ο笏枷虢侵琛=换セ旧弦圆僮鱀OM為主,邏輯上是結(jié)構(gòu)上需要改變哪里,我們就操作哪里邦尊。
  • 規(guī)范化標(biāo)準(zhǔn)組件
    • 基本的封裝性背桐。
    • 簡單的生命周期呈現(xiàn)。
    • 明確的數(shù)據(jù)流動蝉揍。數(shù)據(jù)指的是調(diào)用組件的參數(shù)链峭。
React組件的構(gòu)建
  • react組件由屬性(pros)、狀態(tài)(state)以及生命周期方法三個部分組成又沾。
  • react自定義元素是庫自己建成的
  • react渲染過程包含模板的概率弊仪,及JSX
  • react組件的實現(xiàn)均在方法與類中。所有可以相互隔離杖刷,但不包括樣式
  • react引用方式遵循ES6 module標(biāo)準(zhǔn)
React組件的構(gòu)建方法
  • React基本上由組件的構(gòu)建方式励饵、組件內(nèi)的屬性狀態(tài)與生命周期方法組成。
  • React組件的構(gòu)造方法:React.createClass滑燃、ES6 classes和無狀態(tài)函數(shù)役听。
  • React.createClass
  • 是Reactz=最傳統(tǒng)、兼容性最好的方法表窘。
    const Button = React.createClass({
        getDefaultProps(){
            return{
                color:'blue',
                text:'Confirm',
            };
        },

        render(){
            const {color,text} = this.props;
            return(
                <button className={`btn btn-${color}`}>
                    <em>{text}</em>
                </button>
            );
        }
    });
    
  • ES6 classes
    • 寫法是通過ES6標(biāo)準(zhǔn)的類語法的方式來構(gòu)建方法
import React,{Component} form 'react';
class Button extends Component{
    constructor(props){
        super(props);
    }
    static defaultProps = {
        color:'blue',
        text:'Confirm',
    };
    render(){
        const {color,text} = this.props;
        return(
            <button className={`btn btn-${color}`}>
                <em>{text}</em>
            </button>
        );
    }
}
  • 無狀態(tài)函數(shù)
function Button({color='blue',text='Confirm'}){
    return(
        <button className={`btn btn-${color}`}>
            <em>{text}</em>
        </button>
    );
}
  • 無狀態(tài)組件只傳入props個context兩個參數(shù)典予。不存在state,也沒有生命周期方法乐严。組件本身即上面兩種React組件構(gòu)建方法中的render方法瘤袖。不過,像propsTypes和defaultProps還是可以通過向方法設(shè)置靜態(tài)屬性來實現(xiàn)麦备。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孽椰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凛篙,更是在濱河造成了極大的恐慌黍匾,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呛梆,死亡現(xiàn)場離奇詭異锐涯,居然都是意外死亡,警方通過查閱死者的電腦和手機填物,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門纹腌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滞磺,你說我怎么就攤上這事升薯。” “怎么了击困?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵涎劈,是天一觀的道長广凸。 經(jīng)常有香客問我,道長蛛枚,這世上最難降的妖魔是什么谅海? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮蹦浦,結(jié)果婚禮上扭吁,老公的妹妹穿的比我還像新娘。我一直安慰自己盲镶,他們只是感情好侥袜,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溉贿,像睡著了一般系馆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顽照,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天由蘑,我揣著相機與錄音,去河邊找鬼代兵。 笑死尼酿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的植影。 我是一名探鬼主播裳擎,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼思币!你這毒婦竟也來了鹿响?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谷饿,失蹤者是張志新(化名)和其女友劉穎惶我,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體博投,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡绸贡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅哗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片听怕。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虑绵,靈堂內(nèi)的尸體忽然破棺而出尿瞭,到底是詐尸還是另有隱情,我是刑警寧澤翅睛,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布声搁,位于F島的核電站鸣峭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏酥艳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一爬骤、第九天 我趴在偏房一處隱蔽的房頂上張望充石。 院中可真熱鬧,春花似錦霞玄、人聲如沸骤铃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惰爬。三九已至,卻和暖如春惫企,著一層夾襖步出監(jiān)牢的瞬間撕瞧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工狞尔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丛版,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓偏序,卻偏偏與公主長得像页畦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子研儒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

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

  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,073評論 2 35
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時豫缨,對React的特性、重點和注意事項的提取端朵、精練和總結(jié)好芭,可以做為React特性...
    科研者閱讀 8,242評論 2 21
  • 本筆記基于React官方文檔,當(dāng)前React版本號為15.4.0冲呢。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,726評論 14 128
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南栓撞,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個人覺得該教程講解深入淺出碗硬,比目前大...
    leonaxiong閱讀 2,843評論 1 18
  • 徐則臣的《王城如喝肯妫》,取名于蘇東坡:惟有王城最堪隱恩尾,萬里如海一身藏弛说。 題目是一副漂亮的對聯(lián),抱著對他之前作品《耶路...
    靚小寶閱讀 959評論 0 1