1.0.0 • Published 4 years ago
@hongshooks/use-axios v1.0.0
@hongshooks/use-axios
Usage
// Axios.js
import defaultAxios from "axios";
import { useState, useEffect } from "react";
const useAxios = (opts, axiosInstance = defaultAxios) => {
const [state, setState] = useState({
loading: true,
error: null,
data: null
});
const [trigger, setTrigger] = useState(0);
if (!opts.url) {
return;
}
const refetch = () => {
setState({
...state,
loading: true
});
setTrigger(Date.now());
};
useEffect(() => {
axiosInstance(opts)
.then(data => {
setState({
...state,
loading: false,
data
});
})
.catch(error => {
setState({
...state,
loading: false,
error
});
});
}, [trigger]);
return { ...state, refetch };
};
export default useAxios;
// index.js
import React, { useEffect, useRef, useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
import useAxios from "./useAxios";
const App = () => {
const { loading, data, error, refetch } = useAxios({
url: "https://yts.mx/api/v2/list_movies.json"
});
console.log(
`Loading: ${loading}\nError: ${error}\nData: ${JSON.stringify(data)}`
);
return (
<div className="app" style={{ height: "1000vh" }}>
<h1>{data && data.status}</h1>
<h2>{loading ? "Loading" : "loaded"}</h2>
<button onClick={refetch}>refetch</button>
</div>
);
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
1.0.0
4 years ago