Comments (7)
I think it's weird that it throws that error even though the element has been detached from the DOM, that is not the desired behaviour. I'll investigate why it does so... In the mean time, could you perhaps provide a reduced example? Thanks.
from element-resize-detector.
I'll see what I can do :)
from element-resize-detector.
I've been looking at creating a reduced example, but honestly, I'm having some trouble with it. The original problem seemed to be caused by a race condition, because the number of elements made a difference, and it only showed up for some of my team, and not for the others. I've since been able to eliminate the problem in that specific case in our code, but it could still come occur anywhere else the detector is used.
It looks like we are using version 1.0.3 though, so I can at least see if I can replicate it with 1.1.0 or not.
Otherwise I think the easiest way is to see whether addListener
is ever called from asynchronous code. It seems to me like it is, and if so, it should not be throwing errors, since they can't be caught in a reasonable manner.
I've tried reading the source myself, but haven't quite been able to follow it well enough to find the exact path from .listenTo
to addListener
where the error is thrown.
from element-resize-detector.
I can confirm that the problem persists in 1.1.0.
Here is a screenshot of the debugger in IE11, with a stacktrace:
from element-resize-detector.
Hi, and thanks for the details.
The purpose of that error is to warn about broken invariants during development time. That error should never occur with proper usage, and therefore it should not be catched (since there is no way to recover from it). However, I do acknowledge that if such error persists in production code, one would like to disable/catch it. Perhaps it should not be a throw Error
but instead a console.warn
or similar that can be disabled at will. What do you think?
The actual error might appear if the element being listened to is being changed with el.innerHTML =
or such, which removes the injected element. I guess that it could also appear (but I'm not sure) if one listens to an element and synchronously after detach it from the DOM. I need to verify this. Too bad that you could not get a reduced example to work.
As a side note: The object
approach is being phased out in favor of the much faster (up to 32x!) scroll
approach. We've been using the scroll
approach for over a year in our large scale apps now, and it shows no flaws. So I recommend you switching to scroll
unless you have very specific reasons :) I'll update the readme to reflect this.
Cheers
from element-resize-detector.
If the scroll
method is stable, we'll definitely switch to that. Thanks!
from element-resize-detector.
Can this issue be closed? Thanks
from element-resize-detector.
Related Issues (20)
- [Question] Is V2 still planned? HOT 1
- ADA compliance issue: <object/> element is swipe-able HOT 5
- Performance issue with getting scrollbars sizes in scroll strategy. HOT 3
- Resize detector pollutes the dom HOT 1
- erd.listenTo() always fires initially? HOT 4
- Resize not reported for particular case where listener element is in flex layout HOT 1
- 'window' is not defined in SSR
- use ResizeObserver API when available HOT 3
- Scrollbars go out of sync when using animation HOT 1
- npm show element-resize-detector versions HOT 1
- Invalid arguments. Must be a DOM element or a collection of DOM elements HOT 4
- Console warning violations in Chrome `Forced reflow while executing JavaScript` HOT 3
- [Feature Request] Provide an ECMAScript module (ESM) bundle HOT 2
- Scroll detection strategy does not work within a shadow root HOT 3
- Options are not described in README. HOT 1
- how to trigger function in start and end? HOT 1
- Do you support ie11? HOT 1
- I want to ask what problems will occur if the code here is deleted HOT 1
- how to init not fire HOT 1
- TypeError Cannot read properties of null (reading 'defaultView') HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from element-resize-detector.