A good button affords usability by presenting a different visual style for each state the button is in. Some may not fully apply depending on the medium (eg hover isn't really a state on a touchscreen device).
States:
- Default
- Focused
- Hovered
- Active
Although 2,3,4 can all technically be skipped, (the button still works) the users experience is not as good.
The focus state let's a user see which element on the screen has the focus "where am I?" and let's the user press space/enter to invoke it.
The hover state helps with discoverability showing which elements are actionable, and let's the user know they are "in the hotspot".
Finally the active state lets the user know that their tap/touch/click was successful and the system registered the input. If you've ever used a system that doesn't have this state it can be annoying if the response is slow... you ask yourself did I really click that? And end up clicking it again and again.
TL;DR whenever possible, ensure your buttons render something for all the states.
Note: In addition in some cases there is an additional mode of "disabled".