React 精華一頁紙

同 angularJS拟枚、Vue一樣,React 也是一種替換框架教沾,采用JSX語法進(jìn)行替換

react.min.js - React 的核心庫

react-dom.min.js - 提供與 DOM 相關(guān)的功能

browser.min.js - 用于將 JSX 語法轉(zhuǎn)為 JavaScript 語法

1、典型用法

入門例子

ReactDOM.render(

Hello, world!

,

document.getElementById('example')

);

過程:

I、使用框架 ReactDOM.render 方法操作dom

II腥沽、第一個(gè)參數(shù)時(shí)是 插入的 JSX 語法生成的元素 ;第二個(gè)參數(shù)是綁定 到的DOM的節(jié)點(diǎn)

如果要解析 JSX,則type 要設(shè)定為

JSX:類似 HTML + JS的語法鸠蚪,編譯后進(jìn)行了優(yōu)化今阳,效率更高

2、基礎(chǔ)概念

I茅信、表達(dá)式

ReactDOM.render(

{i == 1 ? 'True!' : 'False'}

,

document.getElementById('example')

);

和 angular和vue不同的是,沒有采用雙括號(hào){{}}, 而使用單括號(hào) {} 取值和表達(dá)式運(yùn)算

II盾舌、邏輯控制

因?yàn)槭穷怘TML的語法,所以沒有設(shè)計(jì) 一些 指令,都是 API操作;事件蘸鲸,也是使用的js 的原生事件妖谴,沒有封裝

React 的 JSX 使用大、小寫的約定來區(qū)分本地組件的類(自定義組件)和 HTML 標(biāo)簽

3酌摇、綁定

同angularJS和Vue不一樣膝舅,React 沒有綁定指令,所以他的綁定窑多,是直接引用和操縱對(duì)象的狀態(tài)(這個(gè)對(duì)象是 state仍稀,具體參照下面關(guān)于state的描述)

4、組件化

I埂息、組件化的例子

var WebSite = React.createClass({

render: function() {

return (

);

}

});

var Name = React.createClass({

render: function() {

return (

{this.props.name}

);

}

});

var Link = React.createClass({

render: function() {

return (

{this.props.site}

);

}

});

React.render(

,

document.getElementById('example')

);

II技潘、組件化的步驟

一、注冊(cè)組件

通過 React.createClass 創(chuàng)建類千康,創(chuàng)建一個(gè) 自定義標(biāo)簽替換規(guī)則

固定屬性 render 返回一個(gè) HTML 模板

二享幽、父控件(外層)向自定義組件(內(nèi)層)傳遞數(shù)據(jù)

I、通過 this.props 傳遞數(shù)據(jù)

通過 getDefaultProps 獲取默認(rèn)數(shù)據(jù)

propTypes 屬性可以校驗(yàn)傳遞的數(shù)據(jù)

II吧秕、操縱狀態(tài)屬性 state

React 把組件看成狀態(tài)機(jī)琉闪,每個(gè)自定義組件,都會(huì)添加一個(gè) state 對(duì)象

通過 this.state 可以獲取state對(duì)象

通過 getInitialState 函數(shù)獲取初始的 state對(duì)象 存儲(chǔ)的數(shù)據(jù)

通過 this.setState 本對(duì)象的方法來設(shè)置 state對(duì)象 存儲(chǔ)的數(shù)據(jù)

var LikeButton = React.createClass({

getInitialState: function() {

return {liked: false};

},

handleClick: function(event) {

this.setState({liked: !this.state.liked});

},

render: function() {

var text = this.state.liked ? '喜歡' : '不喜歡';

return (

{text}我。點(diǎn)我切換狀態(tài)砸彬。

);

}

});

React.render(

,

document.getElementById('example')

);

state VS props

props 傳遞數(shù)據(jù)給子組件颠毙,不可變;state 因?yàn)榭勺兩暗铮梢院陀脩艚换?/p>

同angularJS和Vue相比蛀蜜,

5、組件 API 與生命周期

設(shè)置狀態(tài):setState

替換狀態(tài):replaceState

設(shè)置屬性:setProps

替換屬性:replaceProps

強(qiáng)制更新:forceUpdate

獲取DOM節(jié)點(diǎn):findDOMNode

判斷組件掛載狀態(tài):isMounted

Mounting - 已經(jīng)插入DOM

Updating - 正在重新渲染

Unmounint - 移除DOM

生命周期的方法 - 回調(diào)函數(shù)

componentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

componentDidUpdate

componentWillUnmount

6增蹭、ref 屬性

這個(gè)和 vue的 el屬性類似滴某,可以獲取整個(gè)元素,這樣可以方便的操作元素

var MyComponent = React.createClass({

handleClick: function() {

// 使用原生的 DOM API 獲取焦點(diǎn)

this.refs.myInput.focus();

},

render: function() {

// 當(dāng)組件插入到 DOM 后,ref 屬性添加一個(gè)組件的引用于到 this.refs

return (

type="button"

value="點(diǎn)我輸入框獲取焦點(diǎn)"

onClick={this.handleClick}

/>

);

}

});

ReactDOM.render(

,

document.getElementById('example')

);

I霎奢、在需要操作的元素上户誓,綁定 ref 屬性

II、通過 react 組件對(duì)象的 this.refs 獲取綁定的這個(gè)屬性

后續(xù)可以對(duì)獲取的元素幕侠,進(jìn)行操作

7帝美、綜合應(yīng)用

I、通過 state 屬性晤硕,實(shí)現(xiàn)雙向數(shù)據(jù)綁定 - 針對(duì)表單

var HelloMessage = React.createClass({

getInitialState: function() {

return {value: 'Hello Runoob!'};

},

handleChange: function(event) {

this.setState({value: event.target.value});

},

render: function() {

var value = this.state.value;

return

{value}

;

}

});

ReactDOM.render(

,

document.getElementById('example')

);

a悼潭、通過原生事件 onchange 監(jiān)聽,指定監(jiān)聽函數(shù) handleChange

b舞箍、在監(jiān)聽事件 中 調(diào)用 this.setState 更新綁定數(shù)據(jù) (通過event可以獲取各種數(shù)據(jù))

II舰褪、通過 state 和 props 屬性,實(shí)現(xiàn) 內(nèi)層觸發(fā)外層更新數(shù)據(jù)

var Content = React.createClass({

render: function() {

return

點(diǎn)我

{this.props.myDataProp}

}

});

var HelloMessage = React.createClass({

getInitialState: function() {

return {value: 'Hello Runoob!'};

},

handleChange: function(event) {

this.setState({value: '菜鳥教程'})

},

render: function() {

var value = this.state.value;

return

updateStateProp = {this.handleChange}>

;

}

});

ReactDOM.render(

,

document.getElementById('example')

);

a疏橄、通過原生事件 onClick 監(jiān)聽占拍,指定監(jiān)聽函數(shù) 為外層傳遞來的 屬性 this.props.updateStateProp

b、外層傳遞到內(nèi)層的 屬性 updateStateProp 指定為自身的監(jiān)聽事件 this.handleChange

c软族、外層監(jiān)聽事件 中 調(diào)用 this.setState 更新綁定數(shù)據(jù) (通過event可以獲取各種數(shù)據(jù))

外層傳遞到內(nèi)層的 屬性 updateStateProp

III刷喜、結(jié)合 ajax 請(qǐng)求残制,更新UI

React 組件的數(shù)據(jù)可以通過 componentDidMount 方法中的 Ajax 來獲取立砸,當(dāng)從服務(wù)端獲取數(shù)據(jù)庫可以將數(shù)據(jù)存儲(chǔ)在 state 中,再用 this.setState 方法重新渲染 UI初茶。

var UserGist = React.createClass({

getInitialState: function() {

return {

username: '',

lastGistUrl: ''

};

},

componentDidMount: function() {

this.serverRequest = $.get(this.props.source, function (result) {

var lastGist = result[0];

this.setState({

username: lastGist.owner.login,

lastGistUrl: lastGist.html_url

});

}.bind(this));

},

// 這里的 bind(this) 是因?yàn)?function 里面使用了 this.setState,此時(shí)的this 指針并沒有指向外層的class對(duì)象颗祝,.bind()創(chuàng)建了一個(gè)新函數(shù)(原先函數(shù)的拷貝),當(dāng)這個(gè)函數(shù)在被調(diào)用的時(shí)候恼布,它的 this 關(guān)鍵詞會(huì)被設(shè)置成被傳入的值(這里指調(diào)用bind()時(shí)傳入的參數(shù))

componentWillUnmount: function() {

this.serverRequest.abort();

},

render: function() {

return (

{this.state.username} 用戶最新的 Gist 共享地址:

{this.state.lastGistUrl}

);

}

});

ReactDOM.render(

{/* */}

,

mountNode

);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末螺戳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子折汞,更是在濱河造成了極大的恐慌倔幼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽待,死亡現(xiàn)場離奇詭異损同,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鸟款,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門膏燃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人何什,你說我怎么就攤上這事组哩。” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵伶贰,是天一觀的道長蛛砰。 經(jīng)常有香客問我,道長黍衙,這世上最難降的妖魔是什么暴备? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮们豌,結(jié)果婚禮上涯捻,老公的妹妹穿的比我還像新娘。我一直安慰自己望迎,他們只是感情好障癌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辩尊,像睡著了一般涛浙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摄欲,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天轿亮,我揣著相機(jī)與錄音,去河邊找鬼胸墙。 笑死我注,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迟隅。 我是一名探鬼主播但骨,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼智袭!你這毒婦竟也來了奔缠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤吼野,失蹤者是張志新(化名)和其女友劉穎校哎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞳步,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闷哆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谚攒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳准。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖馏臭,靈堂內(nèi)的尸體忽然破棺而出野蝇,到底是詐尸還是另有隱情讼稚,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布绕沈,位于F島的核電站锐想,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乍狐。R本人自食惡果不足惜赠摇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浅蚪。 院中可真熱鬧藕帜,春花似錦、人聲如沸惜傲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盗誊。三九已至时甚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哈踱,已是汗流浹背荒适。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留开镣,地道東北人刀诬。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像哑子,于是被迫代替她去往敵國和親舅列。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南卧蜓,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個(gè)人覺得該教程講解深入淺出把敞,比目前大...
    leonaxiong閱讀 2,813評(píng)論 1 18
  • 現(xiàn)在最熱門的前端框架弥奸,毫無疑問是 React 。上周奋早,基于 React 的 React Native 發(fā)布盛霎,結(jié)果一...
    sakura_L閱讀 422評(píng)論 0 0
  • 目前,react組件有三種寫法耽装,分別是es5的createClass寫法愤炸,es6的class寫法,以及statel...
    ZoomFunc閱讀 1,625評(píng)論 0 1
  • JSX 知識(shí)準(zhǔn)備 JSX 并不是一門全新的語言掉奄,僅僅是一個(gè)語法糖规个,允許開發(fā)者在javascript中編寫XML語言...
    艾倫先生閱讀 4,500評(píng)論 4 20
  • “媽媽,我要媽媽!”秦云趕快過去诞仓,想抱住兒子缤苫。“媽媽在這墅拭,別怕活玲!”“你不是我媽媽!我要媽媽谍婉!”子杰一邊推開她一邊大...
    就要馬甲線閱讀 345評(píng)論 0 1