React

參考資料:

React 官網(wǎng)
阮一峰教程
菜鳥(niǎo)教程
React 初識(shí)
===
React 是一個(gè)用于構(gòu)建用戶界面的 JAVASCRIPT 庫(kù)。
主要用于構(gòu)建UI, 是 MVC** (模型(model)-用戶界面(view)-控制器(controller))**中的 V(用戶界面)。

JSX

React 使用JSX語(yǔ)法,它允許HTML與javascript混寫(xiě)。
遇到 HTML 標(biāo)簽(以 < 開(kāi)頭),就用 HTML 規(guī)則解析;
遇到代碼塊(以 { 開(kāi)頭),就用 JavaScript 規(guī)則解析。

  <h1> {this.props.title} </h1>

ReactDOM.render()

該方法是React的基本法,它可以將模板(下面的element以及component)轉(zhuǎn)為HTML語(yǔ)言,再插入到指定的DOM中。
Element (元素)
===
描述的是你希望在屏幕中顯示的內(nèi)容

  const element=<h1> hello world </h1>;
  ReactDom.render(
    element,
    document.getElementById('root')
  )

我們可以將該元素傳遞給DOM節(jié)點(diǎn),通過(guò)ReactDOM.render()

React element 是不可改變的,在它創(chuàng)建了之后,它的屬性,子元素都不能改變。如果非要改,就只能重新創(chuàng)建一個(gè)新的元素。

  function tick(){
    const element = (
            <div>
                 <h2>It is {new Date().toLocaleTimeString()}.</h2> 
            </div>
         );
  ReactDOM.render(
            element,
            document.getElementById('root')
        );
  }
  {/*每一次執(zhí)行setInterval都會(huì)創(chuàng)建一個(gè)新的元素*/}
  setInterval(tick, 1000);

Components and Props(組件和屬性)

組件可以把UI(用戶界面)分成許多獨(dú)立的小塊來(lái)單獨(dú)考慮。
它可以接收任意形式的輸入和 返回一個(gè)React element

定義一個(gè)組件有兩種方式 (從React 角度來(lái)看這兩種方法是相同的)

  function Welcome(props){
      return <h1>Hello, {props.name}</h1>;
    }  {/*js的函數(shù)形式*/}

  class Welcome extends React.Component{
    render(){
            return <h1>Hello, {this.props.name}</h1>;
          }
    }   {/*ES6中的類來(lái)定義*/}

  const element = <Welcome name="Sara" />;
  ReactDOM.render(
        element,
        document.getElementById('root')
    );

注意:
組件的名字只能用大寫(xiě)字母開(kāi)頭,否則會(huì)報(bào)錯(cuò)
組件類只能包含一個(gè)頂層標(biāo)簽,否則也會(huì)報(bào)錯(cuò)。

比如定義多個(gè)組件

  function App () {
        return (
                <div>
                      <Welcome name="Sara" />
                      <Welcome name="Cahal" />
                      <Welcome name="Edite" />
                </div>
            );
    }

    ReactDOM.render(
          <App />
          document.getElementById('root')
      );

組件必須返回一個(gè)單一的根元素,所以我們用一個(gè)<div>元素來(lái)包含所有的 <Welcome /> element ,否則會(huì)報(bào)錯(cuò)。
在返回的根元素中(比如上面的<div >),我們可以盡可能將有聯(lián)系的部分合成一個(gè)組件。

注意:
定義一個(gè)function內(nèi)的函數(shù)不能改變它的輸入,比如下面第一種可以第二種不行。

  function sum(a, b) {
       return a + b;
      }
  function withdraw(account, amount) { 
    account.total -= amount;
      }

State and Lifecycle(狀態(tài)和生命周期)

在一開(kāi)始時(shí)說(shuō)“React element在一旦創(chuàng)建了之后,它的屬性,子元素都不能改變。如果非要改,就只能重新創(chuàng)建一個(gè)新的元素。”所以每一次時(shí)間改變都要重新把element傳遞給DOM。但實(shí)際上,大多數(shù)React只執(zhí)行一次 ReactDOM.render() ,所以引入State 。

React把組件看做是狀態(tài)機(jī),一開(kāi)始有一個(gè)初始的State。通過(guò)與用戶的交互導(dǎo)致State改變后,自動(dòng)調(diào)用組件內(nèi)的this.render 方法,再次渲染組件。

  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 ?"like" : "unliked";
          retuen  (
              <p onClick={this.handleClick}>
                  你<b>{text}</b>我。點(diǎn)我切換狀態(tài)。
              </p>
          );
      }
  });

 ReactDOM.rennder(
    <LikeButton />,
    document.getElementById('root') 
  );

注意:
設(shè)置State的只能使用setState({comment: 'Hello'}); 方法

實(shí)現(xiàn)組件的生命周期
組件的周期分為三個(gè)狀態(tài)
* Mounting 已插入真實(shí)DOM
* Updating 正在被重新渲染
* Unmounting 已移出真實(shí)DOM
React為每個(gè)狀態(tài)都提供了兩種處理函數(shù),will函數(shù)在進(jìn)入狀態(tài)前調(diào)用,did函數(shù)在進(jìn)入狀態(tài)之后調(diào)用。共計(jì)五種:
* componentWillMount ()
* componentDidMount ()
* componentWillUpdate(object nextProps, object nextState)
* componentDidUpdate(object prevProps, object prevState)
* componentWillUnmount()

比如,我們當(dāng)一個(gè)組件在一開(kāi)始提交到DOM時(shí)可以設(shè)置一個(gè)不斷更新State的計(jì)時(shí)器(timer)

  componentDidMount()  {
      this.timerID = setInterval( 
      () => this.tick(), 
      1000 
      );
  }

當(dāng)該組件從DOM中移除時(shí)可以清除這一個(gè)定時(shí)器

  componentWillUnmount() {
      clearInterval(this.timerID);
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,241評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,939評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,697評(píng)論 6 409
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,182評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,406評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,772評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,973評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,209評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,638評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,866評(píng)論 1 285
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,644評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,953評(píng)論 2 373

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

  • 原教程內(nèi)容詳見(jiàn)精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過(guò)程中的一些閱讀筆記,個(gè)人覺(jué)得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,849評(píng)論 1 18
  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書(shū),強(qiáng)調(diào)了記筆記和堅(jiān)持的重要性。這幾天也剛好在學(xué)習(xí)React,所以我打算每天堅(jiān)持一篇R...
    gaoer1938閱讀 1,701評(píng)論 0 5
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí),對(duì)React的特性、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié),可以做為React特性...
    科研者閱讀 8,270評(píng)論 2 21
  • 算算實(shí)習(xí)到現(xiàn)在,工作經(jīng)歷一年半了。 其實(shí)也是模模糊糊的一年半,總是不擅長(zhǎng)記住特別的日子,大體這個(gè)月份。(不要在意這...
    tree閱讀 270評(píng)論 0 1
  • Java動(dòng)態(tài)代理 引言 最近在看AOP代碼,其中利用到了Java動(dòng)態(tài)代理機(jī)制來(lái)實(shí)現(xiàn)AOP織入。所以好好地把Java...
    草捏子閱讀 1,541評(píng)論 0 18