Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid setState on unmounted components #97

Open
srph opened this issue Oct 26, 2015 · 4 comments
Open

Avoid setState on unmounted components #97

srph opened this issue Oct 26, 2015 · 4 comments

Comments

@srph
Copy link
Contributor

srph commented Oct 26, 2015

So, I'm using react-resolver with react-router for permissions. So, if a user doesn't pass a certain requirement, they're redirected somewhere. This means that I don't really want to put something to the props.

I just want to avoid errors such as these:

Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the Resolver component.
Warning: setState(...): Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.
@ratson
Copy link
Contributor

ratson commented Jan 2, 2016

Encountered the same problem, @ericclemmons is there any way we could avoid it?

Update:
Just have read https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
Seems it is the solution that react-resolver could implement to solve the problem.

@ericclemmons
Copy link
Owner

I'm curious if this is solved in react-router 2.0.

This exists because resolution happens, you attempt to redirect (which should be synchronous and immediate), but the router seems to trigger the redirect in the next event loop/tick/whatever, meaning the component still renders, mounts, etc. and then the redirect happens.

I'm all for a fix, but curious if this has been solved with the rewrite first.

@ratson
Copy link
Contributor

ratson commented Jul 9, 2016

This line could be executed after unmount regardless redirects, as promise is resolved asynchronously.

AFAIK, that's why the blog post suggest to cancelling the promise before unmount. Or am I missing something?

@ericclemmons
Copy link
Owner

I suppose the only/best way around this is to track if the component is still mounted or not before calling setState...

@ericclemmons ericclemmons changed the title Plain Resolver Avoid setState on unmounted components Jul 9, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants