useSelector & useDispatch

useSelector() allows you to access the state of your Redux store.

useDispatch() returns a copy of the dispatch() function of the Redux store.

As the store state changes, the component is re-rendered. Dispatching an action causes useSelector() to be called.
Every time an action is dispatched, useSelector() only forces a re-render if the selector result appears to be different than the last result. You can define your own equality function too: (next, prev)=>Boolean.
More information can be found here.
Without useCallback(), 'increment' would point to a different memory reference every time the wrapper component is rendered, thus triggering re-rendering of <Plus>.