-
-
Notifications
You must be signed in to change notification settings - Fork 8.4k
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
Incorrect vite warning regarding nesting tr directly in table element #12088
Comments
const table = document.createElement('table');
table.innerHTML = '<tr></tr>';
console.log(table.innerHTML); |
https://html.spec.whatwg.org/multipage/tables.html#the-tr-element |
I’d suggest making the check more flexible, as it’s not very comprehensive at the moment. |
I don't think this is showing what you think it is showing. This is a serialized DOM. In HTML, |
The directly generated |
At a minimum the warning shouldn't claim that this is due to a spec. It seems this is constraint introduced by the implementation details of hydration. It could say something like this.
Personally, I'm not using SSR at all, so then I would know it's perfectly safe to ignore this warning. |
Yes, the warning should be corrected. Perhaps we can try adding some transformations to similar behaviors so that |
I see the same thing. Fix the warning or provide a work around? |
I'm seeing my stdout absolutely brim-filled with this warning and its accompanying template print out in both dev and build environments, to a point that it swallows and obscures any legitimate warnings. Could this warning be predicated by SSR actually being used? Or could we disable this warning in any way? (except writing a custom vite logger to filter it out) I see that this issue is labeled as an edge-case, my vote is that it is not. |
Can there be some additional smarts going on, such that this warning only displays if there is a mismatch detected between SSR and CSR? Alternatively, Vue should not be adding nodes because the browser is fine with no such node being present. Perhaps that's the real problem, that Vue should not be doing this at all? |
Update... I just spent the time to modify source to always use either thead or tbody or both. I had maybe a dozen cases in which I was not using the optional node. So now I guess I'm on team tbody. Moooving on. |
i agree with @aelgn - i dont think this is an edge case and, since this is optional html syntax, it makes it harder to debug actual errors |
thead and/or tbody did fix the error bug which showed up when running: npm run dev. I just did an update and its still there: |
Technically, that same spec says this too:
https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions Also, even if someone is not using SSR, they shouldn't be writing invalid HTML. This particular case of tr inside table doesn't affect non-SSR users, but other cases should keep showing warnings. Svelte also throws similar error: |
That quote is regarding the document object, not the markup. The parenthesized part explicitly explains the relationship between the markup and the document object. If you don't believe me, you can use the WHATWG's own validator service, which shows no errors or warnings for direct nesting of
Agreed. But this isn't invalid. I've quoted the relevant spec.
True. But at least the error message doesn't claim that it's because it's invalid, just that it breaks Svelte's assumptions. My preference would be that the warning was removable by default or configuration. But I'd settle for a message worded like svelte's, which makes it clear that the constraint is based on vue's implementation details. |
Vue version
3.5.10
Link to minimal reproduction
https://play.vuejs.org/#eNp9kDELwjAQhf9KuVnqoJMUQcVBBxV1zFLrWatpEpKLFqT/3SSlrYN0CS/vexfe5QMLpeKXRZhBQlgqnhLOmYiihNILb6S/6Hkydkcg4xY51Y/ACMhkUtyKPH4YKdyLHx9nkMlSFRz1XlEhhWEwiwLxLOVcvrfBI21x1PrZHbPnH/9hKu8xOGg0qF/IoGOU6hypwevTDiunO1jKq+UuPQCPaCS3vmMTW1pxdbV/cqHtplRSUyHys1lXhMK0S/miPlmHPAP3rauB1fu6k3ga5pioof4CfnKCSA==
Steps to reproduce
Create a SFC with this content.
Vite will issue a warning:
This warning is factually incorrect. The relevant spec says that a
<table>
may contain:This is because htmlNesting.ts does not list
tr
as a valid child oftable
, despite the spec allowing it.What is expected?
I expect no warning to be produced.
What is actually happening?
A warning is produced from vite:
System Info
+-- @vitejs/plugin-vue-jsx@3.1.0 +-- @vitejs/plugin-vue@5.0.4 +-- @vue/tsconfig@0.4.0 +-- vite@5.4.8 +-- vue-tsc@2.1.6 `-- vue@3.5.10
The text was updated successfully, but these errors were encountered: