Random wrong DOM elements order
See original GitHub issueHi there,
I’m seeing incorrect ordering of DOM elements in Firefox on Mac when rendering the below component. It’s being rendered inside a Suspense and a fragment if this helps.
const CookieWidget = ({
type = "banner",
location = "bottom",
onAccept = noop,
backdrop = false,
...props
}) => {
const [Widget, widgetProps] = useCookieWidget(type, location);
return (
<>
{!!backdrop && <Backdrop show />}
<Widget {...props} {...widgetProps} onAccept={onAccept} />
</>
);
};
This is the screenshot from rendered DOM elements:
They should be rendered the other way around, the current order makes the backdrop cover the widget. Any help? Maybe I should provide more code parts? The weird thing is that sometimes it renders in the correct order, usually the first time after a hard refresh. Consecutive soft refreshing causes wrong order.
Issue Analytics
- State:
- Created 3 years ago
- Reactions:2
- Comments:14 (5 by maintainers)
Top Results From Across the Web
How to randomly re-render the DOM nodes' order of ...
There are several ways you can go about "shuffling" an array. I chose the Fisher-Yates method in an experimental "war" card game.
Read more >Randomizing the display order of content using JavaScript
Using JavaScript, we can jiggle things up, and display pieces of content that randomly interchange order.
Read more >The 10 Most Common JavaScript Issues Developers Face
If you need help figuring out why your JavaScript isn't working, consult this list of the 10 most common JavaScript issues from a...
Read more >eq | Cypress Documentation
Get A DOM element at a specific index in an array of elements. The querying behavior of this command matches exactly how .eq()...
Read more >How can you randomize the order in which components are ...
If I have a few Card.js components rendered on the DOM, how can I ... it continually determines the next element by randomly...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
I’m upgrading a Preact 8 codebase to Preact X, and I also ran into this unusual DOM order behavior. I’m sharing how I worked around the issue, though it’s not clear to me why the old code didn’t work.
After rewriting/fixing my blog feed code, additional posts that were loaded (appended) to my feed array would be rendered in a strange order: one would get added to the end of the output, and the rest would get added to the front. If I was to
console.log
or view it in the Preact Dev Tools, the order would be correct. It’s only the DOM that was wrong.Anyway, like @olliekav above I solved my problem by wrapping my output in another tag (in my case, a Fragment).
If anyone’s interested, here’s a written example of the unusual output.
Before clicking the MORE button, my output would look something like this.
After clicking the MORE button, the MORE button disappears (replaced with a loading animation). After loading is complete, the button returns, but output looks like this.
To me it looks to me like the last item (MoreButton) was replaced by item 5, then everything else got pushed on to the front. I did try adding keys in case that was related, but it was not.
If I put a
console.log
inside mymakeFeedItem
function, OR view the VDOM in the Preact Dev Tools, the output is what you’d expect:Firefox and Preact 10.11.0.
So the only way I could get the order to reliably work in my case, was to wrap the provider
{props.children}
in an extra container.I’ll put together a codepen this week and see if I can replicate with a minimal use case 👍