適用于 React 框架的 Axios 組件,具有 child function callback。
在 render 階段進(jìn)行異步請求。
使用 npm:
$ npm install react-axios
注意以下依賴的安裝:
$ npm install axios
$ npm install react
$ npm install prop-types
<Request
instance={axios.create({})}
method=""
url=""
data={}
params={}
config={}
debounce={200}
debounceImmediate={true}
isReady
onSuccess={response => {}}
onLoading={() => {}}
onError={error => {}}
/>
<Get ... />
<Delete ... />
<Head ... />
<Post ... />
<Put ... />
<Patch ... />
包含在你的文件中:
import { AxiosProvider, Request, Get, Delete, Head, Post, Put, Patch, withAxios } from 'react-axios';
發(fā)起一個 GET
請求:
// 為給定 ID 的用戶發(fā)送請求
render() {
return (
<div>
<Get url="/api/user" params={{id: "12345"}}>
{
(error, response, isLoading, onReload) => {
if (error) {
return (<div>Something bad happened: {error.message} <button onClick={() => onReload({ params: { reload: true } })}>Retry</button></div>)
} else if (isLoading) {
return (<div>Loading...</div>)
} else if (response !== null) {
return (<div>{response.data.message} <button onClick={() => onReload({ params: { refresh: true } })}>Refresh</button></div>)
}
return (<div>Default message before request is made.</div>)
}
}
</Get>
</div>
)
}
error
:Axios返回的error對象.
response
:Axios的response 對象.
isLoading
:布爾值,表示axios是否在發(fā)送一個請求
onReload(props)
:函數(shù)調(diào)用另一個 XHR 請求。該函數(shù)接收新的臨時屬性,這些屬性將覆寫現(xiàn)存的屬性并僅用于此次請求。
創(chuàng)建一個 axios 實例
const axiosInstance = axios.create({
baseURL: '/api/',
timeout: 2000,
headers: { 'X-Custom-Header': 'foobar' }
})
通過一個 provider 傳遞
<AxiosProvider instance={axiosInstance}>
<Get url="test">
{
(error, response, isLoading, onReload) => { /* ... */ }
}
</Get>
</AxiosProvider>
或者通過 props 傳遞
<Get url="test" instance={axiosInstance}>
{
(error, response, isLoading, onReload) => { /* ... */ }
}
</Get>
當(dāng)你需要使用 axios 時,會從自定義的 provider 中檢索。如果<AxiosProvider/>
不存在,那么會傳遞默認(rèn)的實例。
const MyComponent = withAxios(class MyComponentImpl extends React.Component {
componentWillMount() {
this.props.axios('test').then(result => {
this.setState({ data: result.data })
})
}
render() {
const data = (this.state || {}).data;
return <div>{JSON.stringify(data)}</div>;
}
})
<AxiosProvider instance={axiosInstance}>
<MyComponent />
</AxiosProvider>
更多建議: