If you call something in the render, not only do you have to actually wait for it render for your action to happen -- but you risk an infinite loop.
React runs by checking if props have changed, then re-renders. React Router changes the page through props. If you changed the state inside your render, the component would be caught in an infinite loop (rendering, updating the state, re-rendering, updating, etc etc).
It works when you make it a "side effect", using a pure function, or by changing the props during appropriate lifecycles (like componentDidMount() or willReceiveProps()). This allow's React to handle rendering, and re-rendering, of components properly when comparing props.
Diego Bernal made a great recommendation to abstract the code into a HOC, which is basically a pure function that accepts props and returns your child component (the page) when conditions are met.