-
Notifications
You must be signed in to change notification settings - Fork 30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何在React中做Ajax 请求 #1
Comments
手机端的react页面 配合ajax库 有什么好的方案吗? |
可以使用zepto的ajax模块,或者自己封装一个 |
翻译的文章,标注原地址 |
export 是异步的,这样的做法在实际项目中并不具备多大意义。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
如何在React中做Ajax 请求?
首先:
React
本身没有独有的获取数据的方式。实际上,就React
而言,它甚至不知道有服务器画面的存在。React
只是简单地渲染组件,单独从两个地方获取数据:props
和state
。因此,为了使用服务器的数据,你需要在你的组件(component)的
props
或state
里拿到数据。你可以将这个过程与服务和数据模型复杂化,就像你所希望的那样,但最终只是组件渲染
props
和state
。选择一个HTTP 库
为了获取来自服务器的数据,你需要一个
HTTP
库,网上有很多,最终他们都做同样的事情,但他们有不同的特点。Promise
?那就选axios
吧:https://github.com/mzabriskie/axiosPromise
?,但是喜欢callback
?不妨看看superagent
?https://github.com/visionmedia/superagent当然,你也可以选择自己封装一个ajax库,我喜欢Axios,下面将以这个库作为例子,如果你不喜欢,可以选择其他库看看。
Fetch Data
如下是一个简单的实例,一个组件从
subreddit
获取职位。看看这个例子,我们将会了解它是如何工作的它是如何工作的?
首先,我们将
axios
库import
进来。这个
constructor
先调用super
,然后初始化state
,让它拥有一个posts
空数组。componentDidMount
是关键所在,这个方法将会在组件插入DOM
的第一时间执行。该方法在整个组件的生命周期只会执行一次。它使用
axios.get
方法从subreddit
获取数据,反引号的字符串是ES6
的模板字符串,${}
部分是由表达式的值所取代,所以URL
传递给axios.get
实际上是http://www.reddit.com/r/reactjs.json。有两点你需要注意的是:
.json
并且获得那个职位的json形式的展示www
,你将会得到一个CORS错误(至少我没有忘记)因为
Axios
使用Promise
,所有我们可以链式调用then
方法来处理response
。获取的职位信息是一点一点的转换后提取的,最重要的一点是,组件的状态(state)是由职位与新数组调用this.setState
更新的,由此触发一个重新渲染,然后职位就可以看见了The text was updated successfully, but these errors were encountered: