silx-kit / h5web

React components for data visualization and exploration
https://h5web.panosc.eu/
MIT License
165 stars 17 forks source link

Fix trying to close file twice in strict mode #1615

Closed axelboc closed 2 months ago

axelboc commented 2 months ago

Following the stale state issue in myHDF5 that was fixed in #1568, I started seeing HDF5 warnings in development when navigating between files: the h5wasm provider was trying to close the previous file twice.

That's because when React in strict mode re-renders a second time to detect side effects, it doesn't update states (i.e. setPrevApi(api) has no effect) so prevApi !== api evaluates to true again and prevApi.cleanUp() is called again.

Now that HDF5 errors are thrown instead of logged as warnings, they really stand out in the console. So I thought I'd try to get rid of them.

None of the React-y solutions (which involve either a key or a useEffect with a clean-up function) are satisfactory, as explained in #1568. In the end, all I want is to call the clean-up function when the useMemo callback is re-invoked, which can be done by just storing the previous API instance in a ref instead of a state.