reactjs / React.NET

.NET library for JSX compilation and server-side rendering of React components
https://reactjs.net/
MIT License
2.28k stars 940 forks source link

Redux store reused between renders? #1276

Open magnusottosson opened 2 years ago

magnusottosson commented 2 years ago

Hello,

I found an interesting bug in our production environment. One component that uses redux failed to set it redux store data but still tried to render. It then, in some cases, rendered data from a previous render for the same component. All renders are on the server.

This leads me to believe that the redux store is shared between requests? I have engine poolin on so I guess its just when I get the same engine instance?

Could this be true?

Daniel15 commented 2 years ago

Instances of the JS engine are shared between requests to make requests faster (as it only has to load the JS once). Either:

  1. Disable pooling. This will mean that each request creates a brand new JS engine, which slows down page load a bit.
  2. Clean up any global state at the end of your request (eg execute some JS in the JS engine). We can provide example code for this if needed.
magnusottosson commented 2 years ago

OK! good. I just wanted to get it confirmed that state is shared :) But then I know and I can handle it.

magnusottosson commented 2 years ago

Another question: It seems that when you run ReturnEngineToPool the engine is disposed (if pooling is used). Wouldnt this mean that the current engine wont be used again? So no shared state with the next component that renders?