-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
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
Unexpected "duplicate presence of slot" #7913
Comments
Hello @Kelin2025 In v2.5, there was some changes in This might solve your confusion |
Yeah, I know it, but I don't really understand why I get this error, there are no duplicates of slot but only rerender. |
It looks like a slot inside a scoped slot is rendered more than once. |
@Justineo it's being re-rendered on changes but it shouldn't cause problems, I think 🤔 |
My 2 cents. Here is another reproduction of this issue (https://codesandbox.io/s/m5kl6p97qx). Notice the warning being raised only once the modal is shown more than once. On the other hand, the JSX version of the same component is not raising any warning (https://codesandbox.io/s/k0wpj60z5r). |
I'm experiencing the same thing. Anything that triggers a re-render inside the slot-scope causes a warning about duplicate slot presence. The issue seems to be here on this line here. Once the slots have been rendered once, subsequent executions of that block have I would imagine something should be setting that back to false when a re-render is triggered, but admittedly I know almost nothing about how Vue works under the hood so that's just a wild guess. This bug seems like an unlikely edge case but it's happened to me a couple of times recently. I'm a big fan of the pattern of writing renderless components that can be paired with concrete implementations, and trying to pass the content from the consumer into the concrete implementation is when this issue is arising. |
…lot-scope Because slotNodes inside a slot-scope context are already set to _rendered = true after initial render, the warning for duplicate slot presence always fires when a slot-scope prop change triggers a re-render. With this change, the compiler tracks whether any slot-scoped elements have been encountered at the point the slot is compiled. If so, the direct ancestors of the slot are checked for slot-scope presence, and if found, the warning is supressed. This is admittedly not a perfect solution, as within a slot-scope context the warning now does not fire even when there _are_ duplicate slots, but I couldn't find a good way to get around that. fix vuejs#7913
try this:
app:
especially when "slot" in "v-for" |
Note that if you're using Vue.js ≤v2.4.x, then you may see this error if you are trying to use The solution is to either update Vue.js to ≥2.5 OR use "scope" instead of "slot-scope":
Hope that helps anyone else finding this on google like I did! PS. If you're using Vue.js ≤v2.4.x, remember that you'll need to use a <div class="form-group col-md">
<label>Autocomplete field 4 (w/ custom search results):</label>
<autocomplete v-model="autocompleteExampleValue4" action="listGlobalSearchResults" :handle-formatting-response-data="handleFormattingDummySearchResults" placeholder="This one has a custom placeholder too">
<template slot="search-result-item" scope="slotData"><!-- Note that you can use destructuring here, but it only works in modern browsers -- otherwise you have to define a separate variable -- like scope="slotData" and then use {{slotData.id}}... (see https://vuejs.org/v2/guide/components-slots.html#Destructuring-slot-scope) -->
<!-- TODO: update to vue ≥ 2.5.0 to allow this slotData thing to be attached w/o using a template element. Also when we do that, "scope" will become "slot-scope". See https://vuejs.org/v2/guide/components-slots.html#Scoped-Slots for more info -->
<span>{{slotData.searchResult.label}}</span>
</template>
</autocomplete>
</div> |
This comment has been minimized.
This comment has been minimized.
This also removes the restrictions on rendering the same slot multiple times. close vuejs#7913
This also removes the restrictions on rendering the same slot multiple times. close vuejs#7913
Version
2.5.2
Reproduction link
https://codesandbox.io/s/mzvkppmvo8
Steps to reproduce
What is expected?
It should work without errors
What is actually happening?
Changes in AppSwitcher.vue caus "Duplicate presence of slot "subtext" found in the same render tree" error but there are no duplicates.
Also, adding
slot-scope
to div in App.vue solves problem and no error there, but why it happens withoutslot-scope
?The text was updated successfully, but these errors were encountered: