Skip to content

Instantly share code, notes, and snippets.

@brunosabot
Created January 29, 2022 21:42
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 brunosabot/a48185e09bac40b2044a5f64ceb91642 to your computer and use it in GitHub Desktop.
Save brunosabot/a48185e09bac40b2044a5f64ceb91642 to your computer and use it in GitHub Desktop.
export const HelloApiContext = React.createContext({
values: { name: "" },
});
export function MyHelloApiComponent({ children }) {
const [error, setError] = useState(false);
const [loading, setLoading] = useState(false);
const [serverData, setServerData] = useState({ name: "" });
const loadData = useCallback(() => {
setLoading(true);
setError(false);
fetch("https://brunosabot.dev/api/hello/")
.then((result) => result.json())
.then((data) => {
setServerData(data);
setLoading(false);
})
.catch(() => setError(true));
}, []);
useEffect(loadData, []);
return (
<HelloApiContext.Provider
value={{ values: { error, loading, data: serverData } }}
>
{children}
</HelloApiContext.Provider>
);
}
export function MyRenderingComponent() {
const { values } = useContext(HelloApiContext);
if (error) return <div>An error has occurred</div>;
if (loading) return <div>Loading...</div>;
return <div>{values.data.name}</div>;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment