深入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
  • 用意在于通過加入增強(qiáng)語法,使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é)點(diǎn)注釋*/}
            <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ū)ο笏枷?。交互基本上以操作DOM為主,邏輯上是結(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容