react基礎

生命周期相關函數(shù)

 生命周期共提供了10個不同的API。

1.getDefaultProps
  作用于組件類,只調用一次,返回對象用于設置默認的props,對于引用值,會在實例中共享。

2.getInitialState
  作用于組件的實例,在實例創(chuàng)建時調用一次,用于初始化每個實例的state,此時可以訪問this.props。

3.componentWillMount
  在完成首次渲染之前調用,此時仍可以修改組件的state。

4.render
  必選的方法,創(chuàng)建虛擬DOM,該方法具有特殊的規(guī)則:
  只能通過this.props和this.state訪問數(shù)據
  可以返回null、false或任何React組件
  只能出現(xiàn)一個頂級組件(不能返回數(shù)組)
  不能改變組件的狀態(tài)
  不能修改DOM的輸出

5.componentDidMount
  真實的DOM被渲染出來后調用,在該方法中可通過this.getDOMNode()訪問到真實的DOM元素。此時已可以使用其他類庫來操作這個DOM。
  在服務端中,該方法不會被調用。

6.componentWillReceiveProps
    組件接收到新的props時調用,并將其作為參數(shù)nextProps使用,此時可以更改組件props及state。

    componentWillReceiveProps: function(nextProps) {
        if (nextProps.bool) {
            this.setState({
                bool: true
            });
          }
      }

7.shouldComponentUpdate
    組件是否應當渲染新的props或state,返回false表示跳過后續(xù)的生命周期方法,通常不需要使用以避免出現(xiàn)bug。在出現(xiàn)應用的瓶頸時,可通過該方法進行適當?shù)膬?yōu)化。

    在首次渲染期間或者調用了forceUpdate方法后,該方法不會被調用

8.componentWillUpdate
    接收到新的props或者state后,進行渲染之前調用,此時不允許更新props或state。

9.componentDidUpdate
    完成渲染新的props或者state后調用,此時可以訪問到新的DOM元素。

10.componentWillUnmount
     組件被移除之前被調用,可以用于做一些清理工作,在componentDidMount方法中添加的所有任務都需要在該方法中撤銷,比如創(chuàng)建的定時器或添加的事件監(jiān)聽器。
image.png

生命周期簡單模板

class name extend component{
    static defluteProps={
        name:'name',
    },
   constructor(props){
      super(props);
      this.state={.......}
    },
  componmentsWillmount(){

  },
  doSomething = () => {
      require.ensure(['./app2',....], (require) => {
          const Comp = require('./app2');
          this.setState({
              currentComponent: <Comp/>
          })
      })
  };
  render(){
      render(){
        <div>{this.state}</div>
    }
  } 
}

組件之間傳值

  • 父組件 向 子組件 傳遞信息 >>>主要是通過 prop進行傳值
<span style="font-size:18px;">//父組件  
var MyContainer = React.createClass({  
  getInitialState: function () {  
    return {  
      checked: false  
    };  
  },  
  render: function() {  
    return (  
      <ToggleButton text="Toggle me" checked={this.state.checked} />  
    );  
  }  
});  
  
// 子組件  
var ToggleButton = React.createClass({  
  render: function () {  
    // 從(父組件)獲取的值  
    var checked = this.props.checked,  
        text = this.props.text;  
  
    return (  
        <label>{text}: <input type="checkbox" checked={checked} /></label>  
    );  
  }  
});</span>  
  • 子組件 向 父組件 傳遞信息
<span style="font-size:18px;">// 父組件  
var MyContainer = React.createClass({  
  getInitialState: function () {  
    return {  
      checked: false  
    };  
  },  
  onChildChanged: function (newState) {  
    this.setState({  
      checked: newState  
    });  
  },  
  render: function() {  
    var isChecked = this.state.checked ? 'yes' : 'no';  
    return (  
      <div>  
        <div>Are you checked: {isChecked}</div>  
        <ToggleButton text="Toggle me"  
          initialChecked={this.state.checked}  
          callbackParent={this.onChildChanged}  
          />  
      </div>  
    );  
  }  
});  
  
// 子組件  
var ToggleButton = React.createClass({  
  getInitialState: function () {  
    return {  
      checked: this.props.initialChecked  
    };  
  },  
  onTextChange: function () {  
    var newState = !this.state.checked;  
    this.setState({  
      checked: newState  
    });  
  
    //這里將子組件的信息傳遞給了父組件  
    this.props.callbackParent(newState);  
  },  
  render: function () {  
    // 從(父組件)獲取的值  
    var text = this.props.text;  
    // 組件自身的狀態(tài)數(shù)據  
    var checked = this.state.checked;  
        //onchange 事件用于單選框與復選框改變后觸發(fā)的事件。  
    return (  
        <label>{text}: <input type="checkbox" checked={checked} onChange={this.onTextChange} /></label>  
    );  
  }  
});</span>  

以上例子中,在父組件綁定callbackParent={this.onChildChanged},在子組件利用this.props.callbackParent(newState),觸發(fā)了父級的的this.onChildChanged方法,進而將子組件的數(shù)據(newState)傳遞到了父組件。
這樣做其實是依賴 props 來傳遞事件的引用,并通過回調的方式來實現(xiàn)的。
  • 兄弟組件之間的傳值
  <span style="font-size:18px;">// 定義一個容器(將ProductSelection和Product組件放在一個容器中)  
var ProductList = React.createClass({  
    render: function () {  
      return (  
        <div>  
          <ProductSelection />  
          <Product name="product 1" />  
          <Product name="product 2" />  
          <Product name="product 3" />  
        </div>  
      );  
    }  
});  
// 用于展示點擊的產品信息容器  
var ProductSelection = React.createClass({  
  getInitialState: function() {  
    return {  
      selection: 'none'  
    };  
  },  
  componentDidMount: function () {  
    //通過PubSub庫訂閱一個信息  
    this.pubsub_token = PubSub.subscribe('products', function (topic, product) {  
      this.setState({  
        selection: product  
      });  
    }.bind(this));  
  },  
  componentWillUnmount: function () {  
    //當組件將要卸載的時候,退訂信息  
    PubSub.unsubscribe(this.pubsub_token);  
  },  
  render: function () {  
    return (  
      <p>You have selected the product : {this.state.selection}</p>  
    );  
  }  
});  
  
var Product = React.createClass({  
  onclick: function () {  
    //通過PubSub庫發(fā)布信息  
    PubSub.publish('products', this.props.name);  
  },  
  render: function() {  
    return <div onClick={this.onclick}>{this.props.name}</div>;  
  }  
});</span>  
這個例子需要引入一個PubSubJS 庫,通過這個庫你可以訂閱的信息,發(fā)布消息以及消息退訂。
ProductSelection和Product本身是沒有嵌套關系的,而是兄弟層級的關系。但通過在ProductSelection組件中訂閱一個消息,在Product組件中又發(fā)布了這個消息,使得兩個組件又產生了聯(lián)系,進行傳遞的信息。所以根據我個人的理解,當兩個組件沒有嵌套關系的時候,也要通過全局的一些事件等,讓他們聯(lián)系到一起,進而達到傳遞信息的目的。
  • 利用react-redux進行組件之間的狀態(tài)信息共享

require.ensure()按需加載

require.ensure(dependencies: String[], callback: function([require]), [chunkName: String])
 dependencies: 依賴的模塊數(shù)組
 callback: 回調函數(shù),該函數(shù)調用時會傳一個require參數(shù)
 chunkName: 模塊名,用于構建時生成文件時命名使用

路由配置模板

    const RouteConfig = (
        <Router history={history}>
            <Route path="/" component={Roots}>
                <IndexRoute component={index} />//首頁
                <Route path="index" component={index} />
                <Route path="helpCenter" getComponent={helpCenter} />//幫助中心
                <Route path="saleRecord" getComponent={saleRecord} />//銷售記錄
                <Redirect from='*' to='/'  />
            </Route>
        </Router>
    );

fetch 簡單使用 第二個參數(shù)為可選

 var myHeaders = new Headers();
 var myInit = { 
               method: 'GET',
               headers: myHeaders,
               mode: 'cors',
               cache: 'default' 
              };

  fetch(url,myInit).then(function(response) {
                             return response.blob();
                        }).then(function(myBlob) {
                            var objectURL = URL.createObjectURL(myBlob);
                            myImage.src = objectURL;
                        });
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容