初識(shí)React

? fengyu學(xué)習(xí)

今年9月,為了重構(gòu)的項(xiàng)目浑塞,在一個(gè)星期內(nèi)借跪,我囫圇吞棗似地學(xué)習(xí)了React。

即便是4個(gè)月后的今天缩举,回想起當(dāng)日,我還是會(huì)記得5個(gè)小伙伴,每天晚上從7點(diǎn)半起仅孩,就準(zhǔn)時(shí)到會(huì)議室里學(xué)習(xí)React的場(chǎng)景托猩,不免又覺得有些好笑。

如今辽慕,重構(gòu)的項(xiàng)目進(jìn)入了最后的聯(lián)調(diào)階段京腥,我也算是經(jīng)過了實(shí)戰(zhàn)的洗禮了,不過在探索React的路上跌跌撞撞溅蛉,確沒能留下半點(diǎn)記錄公浪,實(shí)屬遺憾。

我決定將這四個(gè)月的經(jīng)歷整理整理船侧,記錄下來欠气,已便將來更好的工作學(xué)習(xí)!

1镜撩、Why React?

這是我在項(xiàng)目初期一直在思考的問題预柒,為什么重構(gòu)的項(xiàng)目選擇了 React

最初我是這么想的

  • 追求時(shí)尚新技術(shù)袁梗,好耶宜鸯,棒棒噠!

后來我發(fā)現(xiàn)了

  • 健全的學(xué)習(xí)文檔及良好的社區(qū)

  • github各種輪子

  • 需要兼容IE8

再后來我覺得是

  • 數(shù)據(jù)驅(qū)動(dòng)視圖

  • 方便自定義UI

由于我們是第三方腳本遮怜,為了良好的兼容性淋袖,之前的腳本都是用 原生JS 。所以我對(duì)這么大的框架一下似乎也接受不了锯梁。

不過重構(gòu)的負(fù)責(zé)人 XB 哥還是說服了我即碗。

  • 今日帶寬不比往日

  • React@14做了拆分,可以有選擇性的引用

加上我的內(nèi)心也是向往新技術(shù)的涝桅。

經(jīng)過了一段時(shí)間的使用拜姿,我覺得 React 確實(shí)有其獨(dú)特之處,相較于 原生JS 的好處:

  • JSX語(yǔ)法冯遂,擁有清晰的dom結(jié)構(gòu)和樣式引用蕊肥,帶來與原生JS創(chuàng)建DOM不一樣的體驗(yàn)

  • 數(shù)據(jù)驅(qū)動(dòng)視圖,一定程度上簡(jiǎn)化了視圖與邏輯分離的難度

下面就開始干貨吧蛤肌!

2壁却、組件、state與props

ComponentReact 中重要的組成部分裸准,大至整個(gè)頁(yè)面展东,小到一個(gè)按鈕,都有可能是一個(gè)組件炒俱。

stateprops 則是一個(gè)組件綻放光彩的必備良藥盐肃!

舉個(gè)栗子:

import React, {Component} from "react";
import ReactDOM from "react-dom";

class SimpleComponent extends Component {

  constructor(props) {
    super(props)
  }

  render() {
    return <div>我只是我</div>
  }
}

ReactDOM.render(<SimpleComponent/>, document.getElementById('app'));

如此一來 SimpleComponent 組件的 render() 方法就將一個(gè)最簡(jiǎn)單的組件渲染到了網(wǎng)頁(yè)上爪膊,這與html并沒有什么區(qū)別,并不能展現(xiàn) React 的強(qiáng)大威力砸王!

下面我們使用 state 給這個(gè) SimpleComponent 做做包裝

import React, {Component} from "react";
import ReactDOM from "react-dom";

class SimpleComponent1 extends Component {
  constructor(props) {
    super();
    this.state = {
      content: '我就是我推盛,那顏色不一樣的煙火',
      color: '#F00'
    };
  }

  render() {
    let style = {
      color: this.state.color
    }

    return <p style={style}>{this.state.content}</p>
  }

  componentDidMount() {
    setInterval(() => {
      this.setState({
        color: this.state.color === '#F00' ? '#0F0' : '#F00'
      })
    }, 1000);
  }
}

ReactDOM.render(
  <div>
    <SimpleComponent/>
    <SimpleComponent1/>
  </div>,
  document.getElementById('app'));  

componentDidMount()React 組件自帶方法,在第一次執(zhí)行 render() 方法后執(zhí)行谦铃,表示組件已經(jīng)加載完畢)中采用 setState() 方法( React 組件自帶方法耘成,能夠設(shè)置 this.state 中屬性的值)對(duì) this.state 中的 color 屬性進(jìn)行設(shè)置,使得組件的顏色能夠動(dòng)態(tài)改變驹闰。

可以看到瘪菌,利用 state ,我們可以輕松的實(shí)現(xiàn) DOM 的渲染嘹朗,而不需要直接操作 DOM师妙,但是僅僅有 state ,似乎還缺少了些什么骡显,我們還可以利用 props 疆栏,將這個(gè)組件更加的完善!

class SimpleComponent2 extends Component {
  constructor(props) {
    super(props);
    this.state = {
      content: this.props.content,
      color: '#F00'
    }
  }

  render() {
    let style = {
      color: this.state.color
    }

    return <p style={style}>{this.state.content}</p>
  }

  componentDidMount() {
    setInterval(() => {
      this.setState({
        color: this.state.color === '#F00' ? '#0F0' : '#F00'
      })
    }, 1000);
  }
}

ReactDOM.render(
  <div>
    <SimpleComponent/>
    <SimpleComponent1/>
    <SimpleComponent2 content="我就是我惫谤,顏色不一樣的煙火"/>
    <SimpleComponent2 content="我也是煙火哦"/>
  </div>,
  document.getElementById('app'));

首先 props 是依賴外部傳入的壁顶,如上代碼 <SimpleComponent2 content="我也是煙火哦"/>

其次在 Component 中使用 props 是直接調(diào)用 this.props.屬性名稱 的溜歪。

了解清楚了 props 的用法若专,再來談?wù)勈褂玫谋匾浴?/p>

組件庫(kù)(泛指如:按鈕、日歷蝴猪,樹调衰,表格、列表自阱、網(wǎng)格)等基礎(chǔ)組件嚎莉,編寫的目的是為了方便使用的。

盡管上面舉的例子并不復(fù)雜沛豌,然而如果我們需要在多個(gè)頁(yè)面使用這個(gè)效果時(shí)趋箩,并不是在每個(gè)頁(yè)面都寫一個(gè)這樣的組件。

而是提取出組件的共同點(diǎn)加派,找出他們的不同點(diǎn)叫确,共同點(diǎn)利用 state 來實(shí)現(xiàn),不同點(diǎn)利用 props 傳入芍锦,來達(dá)到復(fù)用組件的目的

其實(shí) stateprops 的作用還不止這些竹勉,在后續(xù)的總結(jié)中,還有父子組件通信方面的作用娄琉。

3次乓、寫在文末

React 的故事才剛剛開始吓歇,接觸React的時(shí)間也不算太長(zhǎng)。如有描述不周的地方票腰,請(qǐng)斧正照瘾,萬分感謝。

相關(guān)代碼丧慈,可以在github上下載

從6月到現(xiàn)在,已有半年沒有寫文章了主卫。雖說很忙逃默,亦不過是借口而已!

慶幸自己能在 2017 年的初始簇搅,重新拾起總結(jié)的習(xí)慣完域,新年新氣象嘛,加油瘩将!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吟税,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子姿现,更是在濱河造成了極大的恐慌肠仪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件备典,死亡現(xiàn)場(chǎng)離奇詭異异旧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)提佣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門吮蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拌屏,你說我怎么就攤上這事潮针。” “怎么了倚喂?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵每篷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我务唐,道長(zhǎng)雳攘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任枫笛,我火速辦了婚禮吨灭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刑巧。我一直安慰自己喧兄,他們只是感情好无畔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吠冤,像睡著了一般浑彰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拯辙,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天郭变,我揣著相機(jī)與錄音,去河邊找鬼涯保。 笑死诉濒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夕春。 我是一名探鬼主播未荒,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼及志!你這毒婦竟也來了片排?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤速侈,失蹤者是張志新(化名)和其女友劉穎率寡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倚搬,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勇劣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潭枣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片比默。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盆犁,靈堂內(nèi)的尸體忽然破棺而出命咐,到底是詐尸還是另有隱情,我是刑警寧澤谐岁,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布醋奠,位于F島的核電站,受9級(jí)特大地震影響伊佃,放射性物質(zhì)發(fā)生泄漏窜司。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一航揉、第九天 我趴在偏房一處隱蔽的房頂上張望塞祈。 院中可真熱鬧,春花似錦帅涂、人聲如沸议薪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斯议。三九已至产捞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哼御,已是汗流浹背坯临。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恋昼,地道東北人尿扯。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像焰雕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芳杏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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

  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書矩屁,強(qiáng)調(diào)了記筆記和堅(jiān)持的重要性。這幾天也剛好在學(xué)習(xí)React爵赵,所以我打算每天堅(jiān)持一篇R...
    gaoer1938閱讀 1,673評(píng)論 0 5
  • react官網(wǎng):https://facebook.github.io/react/內(nèi)容來源:http://www....
    Lusia_閱讀 509評(píng)論 0 0
  • 1吝秕、虛擬DOM:降低了算法復(fù)雜度,提升速度空幻,主要是diff computation 2烁峭、組件(快速?gòu)?fù)用) 3、學(xué)會(huì)...
    94小輝閱讀 238評(píng)論 0 0
  • 《小王子》秕铛,改編成電影之后约郁,卻是部灰色的現(xiàn)代童話,世界很冷但两,與自己想象的電影差了一個(gè)星球的距離鬓梅。。玫瑰與小狐貍教會(huì)...
    mo清夜無塵閱讀 258評(píng)論 1 0
  • 故友辭京,赴疆三年紧阔。留下未滿月的兒子坊罢,滿頭白發(fā)的父母。辭行聚會(huì)上都是互相認(rèn)識(shí)十年以上的兄弟擅耽。 男人如果說不喜歡酒活孩,...
    小地方酒閱讀 473評(píng)論 0 0