Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

115
Vistas
¿Cómo manipular DOM tanto después del renderizado del lado del servidor como del lado del cliente?

Aquí está mi código (es un componente Vue en una aplicación Nuxt):

 <template> <div class="comment-editor" v-if="loggedIn"> <div class="leftside"> <!-- <client-only> --> <textarea ref="editor" v-model="content" placeholder="your comment" ></textarea> <!-- </client-only> --> <Message v-bind="message" /> </div> <Button text="Publish" color="main" v-if="message.type != 'loading'" @click="publish" /> </div> <div class="notLoggedIn" v-else> You should <nuxt-link to="/signup">register</nuxt-link> or <nuxt-link to="/login">log in</nuxt-link> to write comments. </div> </template> <script> export default { data() { return { content: "", }; }, mounted() { const tx = document.querySelector("textarea"); fh(tx); tx.style.overflowY = "hidden"; tx.addEventListener("input", function () { fh(this); }); function fh(x) { while (x.style.height + "" != x.scrollHeight + "px") x.style.height = x.scrollHeight + "px"; } }, }; </script>

Lo que puede ver en la función "montada" se usa para cambiar dinámicamente la altura de un área de texto. Funciona correctamente cuando el componente se procesa en el lado del cliente (es decir, cuando se navega desde otra página), pero la aplicación falla después de SSR (cuando se abre directamente la página con el componente). ¿Cómo hacer que ese código funcione correctamente en ambos casos?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Debe usar estilos dinámicos en lugar de manipulaciones DOM directas.

Por ejemplo, <textare :style="{ height: computedHeight }" />

Consultehttps://vuejs.org/v2/guide/class-and-style.html#Object-Syntax-1

about 4 years ago · Santiago Trujillo Denunciar

0

El problema era que cuando se montaba el componente, inicialmente, el elemento class="leftside" no formaba parte del dom (debido a que loginIn era igual a false). La solución fue mover el elemento class="leftside" y la función montada() a un componente separado.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda