React學習之路(一)

Reactjavascript

React不是一個完整的MVC框架,最多能夠認爲是MVC中的V(View),甚至React並不很是承認MVC開發模式css

高性能:複雜或頻繁的DOM操做一般是性能瓶頸的緣由,爲此引入了虛擬DOMhtml

虛擬DOM:每當數據變化時,React會從新構建DOM樹vue

使用React大大下降了邏輯複雜性,意味着開發難度下降,產生bug更少java

React衍生品:React native  是React衍生出的一套框架react

React的特色和優點webpack

1.虛擬DOMes6

2.jsxweb

3.單向數據流瀏覽器

4.組件化開發、高效率

組件:同時包含html、css、js、images元素的聚合體

react.js中有React對象,幫助咱們建立組件等功能

react-dom.js中有ReactDOM對象,渲染組件的虛擬dom爲真實的dom

jsx編譯方法:1.瀏覽器端編譯,經過引入browser、babel對script內的代碼編譯      2.利用webpack等開發環境進行編譯,將編譯好的文件引入

render函數和vue組件裏的render徹底同樣,在vue組件中能夠不用編寫render函數,這個時候可使用template模板來編寫組件的虛擬don結構,而後vue組件會自動將模板compile成虛擬dom結構放入render中執行,可是React中須要編寫render函數

組件經過React.createClass建立(es5),在es6中直接經過class關鍵字建立

組件就是一個構造器,每次使用組件都至關於在實例化組件

React的組件必須使用render函數來建立組件的虛擬dom結構

組件使用ReactDOM.render方法將其掛載在某一個節點

組件的首字母必須大寫

jsx是一種語法,全稱:javascript xml

即便使用了jsx語法以後,也是須要將其變編譯成原生的createElement

組件dom添加樣式

在React裏的表達式的符號是‘{}’,做用和vue的表達式做用是同樣的

想給虛擬dom添加行內樣式,須要使用表達式傳入樣式對象的方式來實現

行內樣式須要寫入一個樣式對象,而這個樣式對象的位置能夠放在不少地方,例如React.createClass的配置項中、render函數裏、組件原型上、外鏈js文件中

React推薦咱們使用行內演示,由於React以爲每個組件都是一個獨立的總體(反正不這麼寫,是否是傻)

大多數狀況下仍是爲元素添加類名、id以使用某些樣式,注意添加class類名時,由於class是關鍵字,因此寫成className

在React中,給組件的dom添加事件的時候,也是在行內添加的方式,事件名字須要寫成小駝峯的方式,值利用表達式傳入一個函數便可

注意:在沒有渲染dom時,頁面沒有真實dom,獲取不到dom

組件嵌套

將一個組件渲染到某一個節點裏的時候,會將這個節點裏原有內容覆蓋

組件嵌套的方式就是將子組件寫入到父組件的模板中,且React

注意:React中的註釋要寫成{/**/}

React中的數據承載(Props/State)

React也是基於數據驅動的框架,組件中必然須要承載一些數據,在React中起到這個做用的是屬性和狀態(props & state)

1. 屬性(props) 在組件外部傳入,或者內部設置,組件內部經過this.props得到

2. 狀態(state) 在組件內部設置或者更改,組件內部經過this.state得到

屬性(props)

屬性通常是外部傳入的,組件內部也能夠經過一些方式初始化的設置,屬性不能被組件本身更改

屬性時描述性質、特色的、組件本身不能隨意更改

使組件擁有屬性的方式:

1. 在裝載組件的給組件傳入

傳入數據的時候,除了字符串類型,其餘的都該報上表達式,但爲了規範,全部的數據傳遞最好都包上{}

var Gouzi = React.createClass({

    render(){

        console.log(this)

        return (

            <div>

                <p>個人名字:{this.props.name}</p>

                <p>個人性別:{this.props.sex}</p>

                <p>個人年齡:{this.props.age}</p> 

                <p>個人父親是:{this.props.father}</p>                                             

            </div>

        )

    }

})

 

let info = {

    sex:'male',

    father:'狗爸'

}

 

ReactDOM.render(<Gouzi {...info} name={"大狗子"} age={26}/>,app)

2.父組件給子組件傳入

父組件在嵌套組件的時候爲子組件傳入,傳入的方式和上面的方式同樣

//父組件的render函數

render(){

    return (

        <div>

            <p>父組件:</p>

            <hr/>

            <Son name={'大狗子'}/>

            <Son name={'二狗子'}/>

        </div>

    )

}

3. 子組件本身設置

子組件經過getDefalutProps來設置默認的屬性

getDefaultProps的值是函數,這個函數會返回一個對象,咱們在這裏對象裏爲組件設置默認屬性

這種方式設置的屬性優先級低,會被外部傳入的屬性值覆蓋

getDefaultProps:function () {

    console.log('getDefaultProps')

    return {

        name:'狗爸',

        sonname:'二狗子'

    }

},

//render

<p>我
相關文章
相關標籤/搜索