const { useCallback, useState } = React;
const useHook = () => {
const [isLoading, setIsLoading] = useState(false);
const [data, setData] = useState(undefined);
const getData = useCallback(() => {
setIsLoading(true);
// do your fetch or whatever
setTimeout(() => {
setData("data");
setIsLoading(false);
}, 1000);
}, []);
return [getData, { isLoading, data }];
};
function App() {
const [getData, { isLoading, data }] = useHook();
return (
<div className="App">
<p>IsLoading: {isLoading.toString()}</p>
<p>Data: {data}</p>
<button type="button" onClick={getData}>
Get
</button>
</div>
);
}
// v18.x+
ReactDOM.createRoot(
document.getElementById("root")
).render(
<App />
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
<div id="root"></div>