如何在React中做Ajax 请求?
2017-08-05 12:02
369 查看
如何在React中做Ajax 请求?
首先:React本身没有独有的获取数据的方式。实际上,就
react而言,它甚至不知道有服务器画面的存在。
React只是简单地渲染组件,单独从两个地方获取数据:
props和
state。
因此,为了使用服务器的数据,你需要在你的组件(component)的
props或
state里拿到数据。
你可以将这个过程与服务和数据模型复杂化,就像你所希望的那样,但最终只是组件渲染
props和
state。
选择一个HTTP 库
为了获取来自服务器的数据,你需要一个HTTP库,网上有很多,最终他们都做同样的事情,但他们有不同的特点。
喜欢
Promise?那就选
axios吧:https://github.com/mzabriskie/axios
讨厌
Promise?,但是喜欢
callback?不妨看看
superagent?https://github.com/visionmedia/superagent
当然,你也可以选择自己封装一个ajax库,我喜欢Axios,下面将以这个库作为例子,如果你不喜欢,可以选择其他库看看。
Fetch Data
如下是一个简单的实例,一个组件从subreddit获取职位。看看这个例子,我们将会了解它是如何工作的
import React from 'react'; import ReactDOM from 'react-dom'; import axios from 'axios'; class FetchDemo extends React.Component { constructor(props) { super(props); this.state = { posts: [] }; } componentDidMount() { axios.get(`http://www.reddit.com/r/${this.props.subreddit}.json`) .then(res => { const posts = res.data.data.children.map(obj => obj.data); this.setState({ posts }); }); } render() { return ( <div> <h1>{`/r/${this.props.subreddit}`}</h1> <ul> {this.state.posts.map(post => <li key={post.id}>{post.title}</li> )} </ul> </div> ); } } ReactDOM.render( <FetchDemo subreddit="reactjs"/>, document.getElementById('root') );
它是如何工作的?
首先,我们将axios库
import进来。
这个
constructor先调用
super,然后初始化
state,让它拥有一个
posts空数组。
componentDidMount是关键所在,这个方法将会在组件插入
DOM的第一时间执行。该方法在整个组件的生命周期只会执行一次。
它使用
axios.get方法从
subreddit获取数据,反引号的字符串是
ES6的模板字符串,
${}部分是由表达式的值所取代,所以
URL传递给
axios.get实际上是http://www.reddit.com/r/reactjs.json。
有两点你需要注意的是:
你可以在任意的subreddit URL末尾处附加上
.json并且获得那个职位的json形式的展示
如果你忘记
www,你将会得到一个CORS错误(至少我没有忘记)
因为
Axios使用
Promise,所有我们可以链式调用
then方法来处理
response。获取的职位信息是一点一点的转换后提取的,最重要的一点是,组件的状态(state)是由职位与新数组调用
this.setState更新的,由此触发一个重新渲染,然后职位就可以看见了
相关文章推荐
- 如何在React中做Ajax 请求?
- ajax 请求如何解决乱码
- Ajax(3):get请求之表单中含有中文时如何处理
- flask session session已过期,再发送ajax请求如何处理?
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
- 如何实现ajax延时发送在空闲之后去发送ajax请求
- [置顶] Ajax请求时,如何解释json数据
- 如何使用Ajax(XMLHttpRequest)发送带参数的请求,以及如何在Servlet中获取请求中的参数
- Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
- ajax中如何将utf-8编码的数据请求发送到gbk编码应用的解决方法
- Hybrid架构下,加载本地H5资源后,如何处理Ajax请求?
- AJAX的来龙去脉(由来)-如何被封装出来的--ajax发送异步请求(四步操作)
- jquery如何通过ajax请求获取后台数据显示在表格上
- 如何在jQuery的Ajax调用后管理一个重定向请求
- 如何从jQuery的ajax请求中删除X-Requested-With
- 利用ajax请求的post如何传递数据
- 小白使用React---ajax请求成功后跳转到另一个页面
- 如何解决chrome 等浏览器不支持本地ajax请求的问题
- 三,express+webpack+react 搭建前后端分离项目(前后端如何进行请求交互)
- 在jQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢