You're not using React to its full potential if you think like this.
Usually when I need to trigger a redirect, I'm in some business-level function. So to redirect this way, I would need to set some state in my store, re-render, then hit the conditional, which would redirect, probably unset that state, and then probably trigger some additional business logic.
When really all I want to do is in the business function, directly trigger the redirect and maybe some other logic without any indirection. redux-react-router exists, but it's API is still obtuse compared to something like redux-first-router.
Heh, didn't see this comment before I left a novel up the tree. Seems we have similar ideas about state management.
I think the default RR API is straight React, and that is by design.
I somewhat agree that the <Redirect /> component is not actually that useful, it's only useful in very simple cases like "based on one route plus conditional redirect to another", e.g.:
<Route path="/">
{usersPreviousShoppingGender === "women" ? (
<Redirect to="/women" />
) : (
...
)}
...
</Route>
<Route path="/women">I mean, I see why it's intuitively unappealing to you, but there are perfectly good reasons for the design.
I'm not sure I see how obvious it is that a <Redirect/> is wrong. But that's fine, I take your point that it's not particularly intuitive.
I'm of the opinion that routing, in general, is a function of application state - and I like to manage my application state with Redux - so I will often also mix in connected-react-router [1]. This lets you do navigation w/ an imperative API [2].
[0] https://github.com/ReactTraining/react-router/tree/master/pa...
[1] https://github.com/supasate/connected-react-router
[2] https://github.com/supasate/connected-react-router/blob/mast...
That's one alternative. Another is not to try implementing behaviour that has nothing to do with rendering using a rendering library in the first place.
A horrible amount of accidental complexity has been created in the React ecosystem when people have tried to use it like a full framework. If all you have is a hammer, maybe it's time to consider using other tools as well.