在典型的Web应用程序中,客户端通过浏览器发出http请求,而服务器在响应中发送带有数据的html页面。
但是在单页应用程序(SPA)中,我们只有一页,每当客户端向服务器发出http请求时,它通常都会以json / xml格式的数据进行响应。
为了发出http请求,我们有以下一些选项-
XmlHttpRequest
Axios
Windows获取
Axios易于处理响应和处理请求。
首先安装
npm install –save axios
使用之前将其导入jsx文件
import Axios from ‘axios’;
从组件生命周期发布中,我们观察到componentDidMount是产生副作用(如发出HTTP请求)的最佳位置。因为componentDidMount在组件的生存期内仅执行一次。一旦http请求完成,我们就可以异步更新状态,页面将使用该更新重新呈现。
Axios使用Promise以异步方式工作。
componentDidMount(){ Axios.get(‘url’).then((response)=>{console.log(response)}); }
然后,函数仅包含一个函数,该函数的参数为promise的响应。然后,我们可以使用setState将数据更新为类的状态对象。
我们可以在componentDidMount中更新实际状态之前操纵数据。另外,我们可以在axios中发送查询参数。
根据状态的某些变化,如果我们要发出另一个http请求,则应使用componentDidUpdate。但是我们必须通过添加条件逻辑来确保它不会导致无限循环。使用id作为参数的示例,我们可以检查它是否不等于先前的id,然后可以在此处发出新的http请求。
类似于get请求,我们可以在按钮点击时post请求。
postdata=()=>{ const postObject={ //值 } Axios.post(‘url’, postObject).then(response=>{ //process the response}); }
与get类似,我们也可以在完成post request时获得承诺。还有其他http方法可以用相同的方式执行。
deleteData=()=>{ Axios.delete(‘url’).then(response=>{}); }
在then方法之后有catch方法。
Axios.get(‘url’).then(response=>{}).catch(error=>{ //我们可以将状态更新为错误以在屏幕上显示有意义的消息 });
有时我们需要一个通用的过程,例如在进行http请求处理时添加身份验证数据或记录日志。
在index.js文件中,我们可以添加对所有axios配置可用的拦截器。
Index.js Import axios from ‘axios’; Axios.interceptors.request.use(request=>{ //在即将到来的请求上添加逻辑 return request; });
确保在拦截器中也返回请求。我们可以添加错误逻辑,如下所示
Axios.interceptors.request.use(request=>{ //在即将到来的请求上添加逻辑 return request; }, error=>{ //添加特定于错误的逻辑 return Promise.reject(error); });
同样,我们可以添加拦截器来响应
Axios.interceptors. response.use(response=>{ //在即将到来的响应上添加逻辑 return response; }, error=>{ //添加特定于错误的逻辑 return Promise.reject(error); });
我们可以为axios进行其他全局配置,例如为所有请求设置bse网址。
在index.js文件中,添加以下行
Axios.defaults.baseURL=’your base url’;