React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据库可以将数据存储在 state 中,再用 this.setState 方法重新渲染 UI。
当使用异步加载数据时,在组件卸载前使用 componentWillUnmount 来取消未完成的请求。

方式一:通过jq或者zepto封装的ajax方法

var UserGist = React.createClass({getInitialState: function() {return {username: '',lastGistUrl: ''};},componentDidMount: function() {$.get(this.props.source, function(result) {var lastGist = result[0];if (this.isMounted()) {this.setState({username: lastGist.owner.login,lastGistUrl: lastGist.html_url});}}.bind(this));},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" />,document.body
);

方式二:fetch api

JavaScript 通过XMLHttpRequest(XHR)来执行异步请求,这个方式已经存在了很长一段时间。虽说它很有用,但它不是最佳API。它在设计上不符合职责分离原则,将输入、输出和用事件来跟踪的状态混杂在一个对象里。而且,基于事件的模型与最近JavaScript流行的Promise以及基于生成器的异步编程模型不太搭(事件模型在处理异步上有点过时了——译者注)。
新的 Fetch API打算修正上面提到的那些缺陷。 它向JS中引入和HTTP协议中同样的原语(即Fetch——译者注)。具体而言,它引入一个实用的函数 fetch() 用来简洁捕捉从网络上检索一个资源的意图。

Fetch 规范 的API明确了用户代理获取资源的语义。它结合ServiceWorkers,尝试达到以下优化:

  • 改善离线体验

  • 保持可扩展性

componentDidMount: function() {this.serverRequest = fetch(this.props.source).then((res) => {// res instanceof Response == true.if (res.ok) {res.json().then((data) => {var lastGist = data[0];if (this.isMounted()) {this.setState({username: lastGist.owner.login,lastGistUrl: lastGist.html_url});}});} else {console.log("Looks like the response wasn't perfect, got status", res.status);}}, function(e) {console.log("Fetch failed!", e);});
}

目前支持程度如下:

在github上,有基于低版本浏览器的 兼容实现

参考资料

JavaScript Fetch API
React 入门实例教程

react学习系列之ajax相关推荐

  1. react学习系列之states与props

    state React 把组件看成是一个状态机(State Machines).通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致. React 里,只需更新组件的 state, ...

  2. react学习系列1 修改create-react-app配置支持stylus

    注:由于前端更新非常快,写这篇文章时 create-react-app 使用的版本是1.4.1 最新的使用流程请参照官方文档. create-react-app 是facebook推出的快速创建rea ...

  3. react学习系列1 修改create-react-app配置支持stylus 1

    注:由于前端更新非常快,写这篇文章时 create-react-app 使用的版本是1.4.1 最新的使用流程请参照官方文档. create-react-app 是facebook推出的快速创建rea ...

  4. react学习系列3 使用koa-router模拟后台接口

    当用create-react-app创建好项目,启动后会自动打开 localhost:3000. 我们希望当访问 localhost:3000/api/todo 会向后台发起一个请求,拿到我们想要的 ...

  5. react学习系列(二)

    JSX 语法练习 在jsx语法中,需要书写js代码的时候,请先加上{ } 再书写js语法 import React, { Component } from 'react'let name = &quo ...

  6. React学习系列十propTypes defaultProps

    都是定义在子组件里面的 defaultProps 父子组件传值中,如果父组件调用子组件的时候不给子组件传值,则可以在defaultProps中定义默认值 propTypes 验证父组件传值的类型合法性 ...

  7. 我的AJAX 学习系列文章

    我最近学习AJAX 的笔记 AJAX 学习笔记[一] 简单的异步通信示例 AJAX 学习笔记[二] 我编写的AJAX 测试代码示例 AJAX 学习笔记[三] get 与post 模式的区别 AJAX ...

  8. React学习(九)-React中发送Ajax请求以及Mock数据

    虽互不曾谋面,但希望能和你成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 撰文 | 川川 VX-ID:suibichuanji 点 ...

  9. 狂神学习系列10:Vue

    狂神学习系列10:Vue 声明: 本文章是基于狂神的课程所编写,本人才疏学浅,内容仅作参考 项目和markdown文件资料: 06_Vue: 基于狂神说vue的项目及笔记 文章目录 狂神学习系列10: ...

最新文章

  1. java汉字转换成拼音_Java代码将汉字转换成拼音
  2. SQL Server中的执行引擎入门
  3. WebRTC基本介绍
  4. S3C2440、S3C2450和S3C6410之间区别
  5. [CTF][Web][PHP][JavaScript]弱类型问题
  6. 【codevs1026】逃跑的拉尔夫,广搜的胜利
  7. java中swing循环_在Java游戏循环中使用“ SwingUtilities.invokeLa...
  8. python和c++情侣网名_[宜配屋]听图阁
  9. JVM和GC知识点整理
  10. Express框架的请求处理~非常详细
  11. 路灯干扰者路过时,路灯熄灭的照片
  12. Java学习手册:Java基础知识点(不断扩充更新中)
  13. 2022年熔化焊接与热切割考试题模拟考试题库及在线模拟考试
  14. 测试软件测显卡有啸叫,完美解决 显卡电流声!显卡啸叫!吱吱的电流声!附解决方案!...
  15. 微信小程序:文档下载功能
  16. 爆笑!让你捧腹大笑的标语
  17. 【经验总结】Maple看电子书
  18. 记--重新安装python相关软件及环境配置
  19. 硬盘三大种类(SSD;HHD;HDD)
  20. 【windows】查看文件md5码

热门文章

  1. jsp自定义标签学习
  2. php 面向对象学习
  3. anacoda的spyder在调用matplotlib的时候无法显示动画效果【学习笔记】
  4. POJ1236 Network of Schools【强连通】
  5. ACM图灵奖获得者:想从大数据中获益,先解决集成问题!
  6. Redis源码试读(一)源码准备
  7. redis 的 HyperLogLog
  8. 淘宝npm镜像使用方法
  9. 【Unique Binary Search Trees II】cpp
  10. 运维自动化之zabbix (Discovery)(9)