This is a solution to the Advice generator app challenge on Frontend Mentor. Frontend Mentor challenges help you improve your coding skills by building realistic projects.
Users should be able to:
- View the optimal layout for the app depending on their device's screen size
- See hover states for all interactive elements on the page
- Generate a new piece of advice by clicking the dice icon
- Solution URL: Find solution URL here
- Live Site URL: Find live site URL here
- Vite
- Tailwind CSS
- CSS Grid
- Mobile-first workflow
- React - JS library
- React icons
One of the major things I learned while taking on this challenge was the loading functonality that tells the user something is happening under the hood, i.e when when for the promise made the async function when calling an API.
Here is how I implemented the loading:
const fetchAdvice = async () => {
setIsLoading(true);
const res = await fetch(url);
const data = await res.json();
setAdvice(data.slip);
setIsLoading(false);
};
Styling for the loading component
const LoadingComponent = () => {
return (
<div className="flex md:gap-4 gap-2 items-center justify-center">
<div className="text-title">
<FaSpinner className="animate-spin text-4xl" />
</div>
<h1 className="text-title font-semibold text-xl">
Let's ask Eleanor Roosevelt
</h1>
</div>
);
};
One of the areas I feel I need to improve on, in the future is handling exceptions that may be generated from an unfullfilled promise.
- Tailwind Docs - This helped me for desiging my loading animation reason. I really liked the design and will use it going forward.
- React API interaction - This is an amazing video which helped me understand how to implement the loading functionality in react among other things. I'd recommend it to anyone still learning this concept.
- Frontend Mentor - @divin3circle
- Twitter - @Silasabel5