vuejs / core

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
https://vuejs.org/
MIT License
47.75k stars 8.35k forks source link

v-text directive does not work after SSR if another custom directive is applied to the same element #12309

Closed mefcorvi closed 1 week ago

mefcorvi commented 3 weeks ago

Vue version

Introduced in 3.4.36. Works fine in 3.4.35.

Link to minimal reproduction

https://play.vuejs.org/#__SSR__eNp9kU9LAzEQxb/KmEsV2l1KxUPZFlQK1YOKCl4CUrbT3dRsEpLZtVD2uzvZpX8O0kAOmfeS+b3MXtw7lzQ1iqnIQu6VIwhItZtLoypnPcEePG6ghY23FQzYOpBGmtyaQFCFAmZRvx4sUWsLX9br9dXg5mRplqooNW9i516aVpos7TtxDz4QVk6vCPkEkJVjaEbl8UozItzRTAruJMU8S8tx71PG1VGu7Br1QYeUxSw9e1EMBQUG2agi2QZrOCYzAEiR28opjf7VkWJQKaaRDnhJseIov89djXyNw0M9LzH/+ae+DbtYk+LNY0DfoBRHjVa+QOrlxccLpzkTmb7W7L4gvmOwuo6Mve2hNmvGPvN1tE/dsJQpPsNiR2jCIVQEjc6280vBA3y8EP2EO0luu3s8Mv7F7wZ9fJM/kIVkcifaPxRnvOg=

Steps to reproduce

  1. Define a custom directive, even an empty one without any handlers.
  2. In the page template, create a div with both v-text and the custom directive applied.
  3. Open the page in SSR mode.

What is expected?

The text set by the v-text directive is displayed.

What is actually happening?

The text does not appear. No errors are logged.

System Info

No response

Any additional comments?

If SSR mode is disabled, everything works as expected. v-html directive works fine in both modes.

Related to https://github.com/vuejs/core/commit/79602f9ecd9559954f844774a90286305b13e056 https://github.com/vuejs/core/issues/8112

mefcorvi commented 3 weeks ago

Currently, in the case with the custom directive, this branch is triggered, adding an entry to rawChildrenMap:

https://github.com/vuejs/core/blob/664d2e553d8622bbdeae6bc02836233f6113eb4e/packages/compiler-ssr/src/transforms/ssrTransformElement.ts#L166-L185

The v-html directive works correctly because it overrides the entry in rawChildrenMap, whereas v-text only updates the children property of the node.

https://github.com/vuejs/core/blob/664d2e553d8622bbdeae6bc02836233f6113eb4e/packages/compiler-ssr/src/transforms/ssrTransformElement.ts#L210-L217