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

199
Vistas
¿Cómo puedo hacer que la variable guarde solo la primera vez que la condición es verdadera?

Tengo una variable que obtiene la altura de la barra de desplazamiento cuando overflow-x-auto y estoy usando un framework javascript esbelto.

para resolver este problema utilicé este código:

 <script>
 let hWith = 0;
 let hNot = 0;

 $: scrollBarHeight = hWith - hNot;
</script>

<div 
 bind:offsetHeight={hWith} 
 bind:clientHeight={hNot}
>
 my content...
</div>

y está funcionando bien y salidas: 17

el problema es que bind: siempre se disparará en cada renderizado.

Como sabe, una barra de desplazamiento no cambiará mágicamente el tamaño, por lo que no es importante recalcular siempre el valor de la altura.

una vez que obtengamos el valor 17 (que puede ser diferente según el navegador), deje de volver a calcular.


y donde esta el problema

el problema es que la variable debe ser reactiva con $:
al principio,
porque dado que el contenedor no se desbordará, esto significa que es 0

pero una vez que obtenemos un número mayor que 0. (valor returnedValue > 0 )
la variable ya no necesita ser reactiva


Básicamente quiero que cuando guarde scrollBarHeight (un cálculo simple hWith - hNot ), no lo calcule más.

sabes que no me gusta el hecho de que no puedo escribir directamente la fórmula dentro de una variable en lugar de 3.

con bind: siempre establecerá la variable con el nuevo valor. (eso puede ser ineficiente ya que el valor no cambia mucho)

❌

 let hWith = 0;
let hNot = 0;

$: scrollBarHeight = hWith - hNot;

✅ algo así.

 $: scrollBarHeight = if (div.offsetHeight - div.clientHeight > 0) { 
 // logic/code to make this variable not reactive anymore
 return div.offsetHeight - div.clientHeight;
}

¿Por qué lo necesito?

esta lógica es un niño, no el cuerpo. entonces es por eso que algo se está desbordando. y necesito ese valor para corregir algunos errores.

el problema es que el niño cambia mucho y se vuelve a representar y esto tal vez pueda volver a representar y también vincular mucho los valores.

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

0

Puede simplemente declarar una variable regular y agregar una declaración reactiva sin asignación inmediata. P.ej

 let scrollBarHeight = 0;

$: if (scrollBarHeight == 0 &&
 div.offsetHeight - div.clientHeight > 0) {
 scrollBarHeight = div.offsetHeight - div.clientHeight;
}
almost 4 years ago · Santiago Trujillo Denunciar

0

Romper la declaración reactiva temprano podría ayudar

 let counter = 0;
let evens = 0;
let threes = 0;

$: {
 if (counter < 10) {
 break $;
 }
 if (counter % 2 === 0) {
 evens++;
 }
}

$: {
 if (counter < 10) {
 break $;
 }
 if (counter % 3 === 0) {
 threes++;
 }
}

fuente de respuesta: https://svelte.dev/repl/be829d83edda4dd882b3b375f889745c?version=3.44.0

almost 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