【React】 異步解決方案

時間:2016-08-15 17:38:54
作者:zhongxia
地址:

React 異步解決方案

1. React官方提供的解決方案 Load Initial Data via AJAX

使用jQuery的Ajax方法,在一個組件的 componentDidMount()
發ajax請求,拿到的數據存在組件自己的state中,并調用setState
方法去更新UI。如果是異步獲取數據,則在 componentWillUnmount
取消發送請求

如果只是為了使用jQuery的Ajax方法就引入整個jQuery庫,既是一種浪費又加大了整個應用的體積。那我們還有什么其他的選擇嗎?事實上是有很多的:fetch()fetch polyfillaxios...其中最需要我們關注的是window.fetch()
,它是一個簡潔、標準化的javascript的Ajax API。在Chrome和Firefox中已經可以使用,如果需要兼容其他瀏覽器,可以使用fetch polyfill。

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));
  },

  componentWillUnmount: function() {
    this.serverRequest.abort();
  },

  render: function() {
    return (
      <div>
        {this.state.username}'s last gist is
        <a href={this.state.lastGistUrl}>here</a>.
      </div>
    );
  }
});

ReactDOM.render(
  <UserGist source="https://api.github.com/users/octocat/gists" />,
  mountNode
);

2. 項目如何組織Ajax請求

React官方文檔,告訴我們單個組件如何獲取數據,但是沒有告訴我們項目中,如何組織Ajax的請求,并且把數據保存在哪里?如果這部分沒有規范,多個協作開發的話,會讓項目混亂,難以維護。

1. 把所有數據保存在 根組件

2. 把數據保存在各個模塊入口組件

3. redux 解決方案

參考文章:

  1. React 最佳實踐 - 那些 React 沒告訴你但很重要的事

您可能還感興趣?

  1. 前端技術文章匯總
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,420評論 25 708
  • <a name='html'>HTML</a> Doctype作用?標準模式與兼容模式各有什么區別? (1)、<...
    clark124閱讀 3,556評論 1 19
  • 羊哥,您有空么我們這里很多人特別希望能得到您的指導! 羊哥,你能自我矯正好口吃,還幫助了很多人! 羊哥,有快速矯正...
    口吃科學論閱讀 685評論 0 0
  • 進入社會,我們每個人都面臨著一次次的面試,有的人會發現有時面試所問到的問題是一樣的,有時會問到不一樣的問題,但仔細...
    梓姍0925閱讀 703評論 0 0
  • 那個養花的少年,就那么靜靜的站在那盆花前。那盆曾經無比耀眼的花前,雖然只是白色的小花卻占據了少年的一大片心田。雖然...
    靜和queen閱讀 485評論 7 11