【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. 前端技术文章汇总
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,332评论 25 709
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 9,028评论 1 19
  • 羊哥,您有空么我们这里很多人特别希望能得到您的指导! 羊哥,你能自我矫正好口吃,还帮助了很多人! 羊哥,有快速矫正...
    口吃科学论阅读 3,911评论 0 0
  • 进入社会,我们每个人都面临着一次次的面试,有的人会发现有时面试所问到的问题是一样的,有时会问到不一样的问题,但仔细...
    梓姗0925阅读 3,973评论 0 0
  • 那个养花的少年,就那么静静的站在那盆花前。那盆曾经无比耀眼的花前,虽然只是白色的小花却占据了少年的一大片心田。虽然...
    静和queen阅读 3,321评论 7 11

友情链接更多精彩内容