Vue: $ attrs no está definido cuando el componente no tiene accesorios

Creado en 1 ago. 2017  ·  8Comentarios  ·  Fuente: vuejs/vue

Versión

2.4.2

Enlace de reproducción

https://jsfiddle.net/50wL7mdz/50757/

pasos para reproducir

Acceda a $ attrs como objeto dentro del contexto del componente, cuando no se proporcionaron accesorios.

¿Lo que es esperado?

$ attrs es un objeto que contiene accesorios no reconocidos. Por lo tanto, esperaría un objeto vacío, cuando no se especifican accesorios en la etiqueta del componente.

¿Qué está pasando realmente?

$ attrs no está definido

bug

Comentario más útil

Me encontré con esto y definitivamente fue inesperado para mí que $attrs alguna vez debería ser undefined .

Por ejemplo, si estuviera escribiendo una aplicación de tareas que comienza sin todos, sería muy extraño que la lista comience como undefined lugar de [] . Tendría que agregar if declaraciones (o encadenamiento opcional) en toda su aplicación. Este caso es similar.

Para casos específicos en los que un usuario quiere comprobar si existe algún $attrs , aún sería posible usar Object.keys($attrs).length , por lo que ese caso todavía está cubierto.

Sin embargo, la parte que realmente me convence de que esto es un error es que $attrs _is_ se establece en un objeto vacío cuando se pasa un accesorio a un componente , como señala el OP. Entonces, actualmente, verificar realmente si existe algún $attrs requeriría ambas estrategias:

$attrs && Object.keys($attrs).length

Todos 8 comentarios

Por curiosidad, ¿a qué problema se enfrenta al tener un $attrs indefinido? ¿Estás accediendo a $attrs.something ? (si es así, ¿por qué?)

editar: También estoy preguntando porque tener $attrs igual indefinido cuando no hay atributos puede ser útil

@greegus , en caso de que esté haciendo algo como if ($attrs.myProp) , puede hacer if ($attrs?.myProp) usando babel-plugin-transform-optional-chaining .

Juzgaría que esto es un comportamiento esperado, pero es discutible.

ping @greegus

Me encontré con esto y definitivamente fue inesperado para mí que $attrs alguna vez debería ser undefined .

Por ejemplo, si estuviera escribiendo una aplicación de tareas que comienza sin todos, sería muy extraño que la lista comience como undefined lugar de [] . Tendría que agregar if declaraciones (o encadenamiento opcional) en toda su aplicación. Este caso es similar.

Para casos específicos en los que un usuario quiere comprobar si existe algún $attrs , aún sería posible usar Object.keys($attrs).length , por lo que ese caso todavía está cubierto.

Sin embargo, la parte que realmente me convence de que esto es un error es que $attrs _is_ se establece en un objeto vacío cuando se pasa un accesorio a un componente , como señala el OP. Entonces, actualmente, verificar realmente si existe algún $attrs requeriría ambas estrategias:

$attrs && Object.keys($attrs).length

@chrisvfritz me convenció: es un error.

@LinusBorg Parece que nadie está trabajando en este error actualmente. ¿Puedo tener una pr para esto?

¡Por supuesto!

¿Fue útil esta página
0 / 5 - 0 calificaciones