For dialogs you can use a dialog manager which relies on global state rather then a component state. Have a single component at the root of your app that listens to the dialog global state and render accordingly. This allows you to open dialog from anywhere. Perhaps ill write an article on this.
My method in this article is not to avoid re-render. Is to batch state updates and have a single representation and API for state handling.
An additional benefit (which i don mention in the article) is the ability to define state guards. Perhaps a different article as well.