vecty-router icon indicating copy to clipboard operation
vecty-router copied to clipboard

Issue using redirect - router tries to rerender component which has never been rendered

Open seanrmurphy opened this issue 4 years ago • 0 comments

I am having problems using the redirect mechanism within the router; it seems quite basic but perhaps it's a fundamental misunderstanding on my side.

The crux of the problem is that vecty will panic if it tries to Rerender() a Component which has never been rendered - I think this does not play nice with the refreshRoutes() function in the router particularly if used with a Redirect().

So, if we create a couple of routes as per the example,

func (b *Body) Render() vecty.ComponentOrHTML {
	return elem.Body(
		router.NewRoute("/", &MainView{}, router.NewRouteOpts{ExactMatch: true}),
		router.NewRoute("/blog", &Blog{}, router.NewRouteOpts{}),
	)
}

and we add logic to automatically redirect from / to /blog, then we can easily have a scenario in which the user loads the main page /, the redirection is triggered on the client side, which triggers refreshRoutes() which in turn triggers a Rerender() on the Blog Component; however, the Blog Component has never been rendered in the first place, so a panic occurs.

Is this a known issue or am I doing something wrong?

seanrmurphy avatar Jul 06 '20 09:07 seanrmurphy