For a use case we can first take a look at how bindings are made on a character or playercontroller. They use the input component to very easily bind an input action to a method which is very clean:
InputComponent->BindAction(INPUTACTIONMAPPING_Jump, EInputEvent::IE_Released, this, &UMyCharacter::ActOnJump);
If you do that on a UserWidget for control user made UI actions such as “increase slider” or “reset options” then you are not using the input routing system specifically present on widgets (you use it by overriding OnKeyDown, OnMouseButtonDown etc. there are a bunch). That routing system ensures that a widget can handle / bubble input, prioritize input and that for example input actions don’t execute while you are typing in an editable text UWidget. The problem is that this is incredibly messy to implement, you have to override the methods given in my example, then test if a pressed key is actually in an input action, then perform a method. Why compare it to an input action? Because I don’t hardcode my keys, they are rebindable.