Skip to content

Instantly share code, notes, and snippets.

@ragnaroks
Last active April 8, 2022 03:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ragnaroks/aac4dbe578bcd995cc2c939eb04ffe6e to your computer and use it in GitHub Desktop.
Save ragnaroks/aac4dbe578bcd995cc2c939eb04ffe6e to your computer and use it in GitHub Desktop.
react hook that get client address from IPIFY.ORG
import {useEffect,useState} from "react";
type ClientAddressExportArray = [loading:boolean,error:unknown,data:string|null];
type ipifyData = {ip:string};
const useClientAddress = function () : ClientAddressExportArray {
const [loading,loadingSetter] = useState<boolean>(false);
const [data,dataSetter] = useState<string|null>(null);
const [error,errorSetter] = useState<unknown>(null);
useEffect(function(){
fetch('https://api64.ipify.org?format=json').then(function(response){
if(!response.ok){return null;}
return response.json();
}).then(function(data){
if(!data){return;}
const typeData = data as ipifyData;
dataSetter(typeData.ip);
}).catch(function(exception){
errorSetter(exception);
}).finally(function(){
loadingSetter(false);
});
},[dataSetter,errorSetter,loadingSetter]);
return [loading,error,data];
};
export default useClientAddress;
/* import useClientAddress from 'useClientAddress.ts';
*
* const [loading,error,data] = useClientAddress();
*
* if(!!error){return <ErrorPanel message={error+''} />;}
* if(loading){return <Spinner />;}
* return <Panel>
* <Field title="IP Address" content={data} />
* </Panel>;
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment