【React】 異步解決方案

時(shí)間:2016-08-15 17:38:54
作者:zhongxia
地址:

React 異步解決方案

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

使用jQuery的Ajax方法,在一個(gè)組件的 componentDidMount()
發(fā)ajax請(qǐng)求,拿到的數(shù)據(jù)存在組件自己的state中,并調(diào)用setState
方法去更新UI。如果是異步獲取數(shù)據(jù),則在 componentWillUnmount
取消發(fā)送請(qǐng)求。

如果只是為了使用jQuery的Ajax方法就引入整個(gè)jQuery庫(kù),既是一種浪費(fèi)又加大了整個(gè)應(yīng)用的體積。那我們還有什么其他的選擇嗎?事實(shí)上是有很多的:fetch()、fetch polyfillaxios...其中最需要我們關(guān)注的是window.fetch()
,它是一個(gè)簡(jiǎn)潔、標(biāo)準(zhǔn)化的javascript的Ajax API。在Chrome和Firefox中已經(jīng)可以使用,如果需要兼容其他瀏覽器,可以使用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. 項(xiàng)目如何組織Ajax請(qǐng)求

React官方文檔,告訴我們單個(gè)組件如何獲取數(shù)據(jù),但是沒有告訴我們項(xiàng)目中,如何組織Ajax的請(qǐng)求,并且把數(shù)據(jù)保存在哪里?如果這部分沒有規(guī)范,多個(gè)協(xié)作開發(fā)的話,會(huì)讓項(xiàng)目混亂,難以維護(hù)。

1. 把所有數(shù)據(jù)保存在 根組件

2. 把數(shù)據(jù)保存在各個(gè)模塊入口組件

3. redux 解決方案

參考文章:

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

您可能還感興趣?

  1. 前端技術(shù)文章匯總
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評(píng)論 25 709
  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,829評(píng)論 1 19
  • 羊哥,您有空么我們這里很多人特別希望能得到您的指導(dǎo)! 羊哥,你能自我矯正好口吃,還幫助了很多人! 羊哥,有快速矯正...
    口吃科學(xué)論閱讀 738評(píng)論 0 0
  • 進(jìn)入社會(huì),我們每個(gè)人都面臨著一次次的面試,有的人會(huì)發(fā)現(xiàn)有時(shí)面試所問到的問題是一樣的,有時(shí)會(huì)問到不一樣的問題,但仔細(xì)...
    梓姍0925閱讀 771評(píng)論 0 0
  • 那個(gè)養(yǎng)花的少年,就那么靜靜的站在那盆花前。那盆曾經(jīng)無(wú)比耀眼的花前,雖然只是白色的小花卻占據(jù)了少年的一大片心田。雖然...
    靜和queen閱讀 524評(píng)論 7 11

友情鏈接更多精彩內(nèi)容