2.4.2
https://jsfiddle.net/50wL7mdz/50757/
Acesse $ attrs como objeto no contexto do componente, quando nenhum adereço foi fornecido.
$ attrs é um objeto que contém adereços não reconhecidos. Portanto, eu esperaria um objeto vazio, quando nenhum adereço é especificado na tag do componente.
$ attrs é indefinido
Por curiosidade, que problema você está enfrentando por ter um $attrs
indefinido? Você está acessando $attrs.something
? (se sim, por quê?)
editar: Também estou perguntando porque ter $attrs
igual a undefined quando não há atributos pode ser útil
@greegus , no caso de você estar fazendo algo como if ($attrs.myProp)
você pode fazer if ($attrs?.myProp)
usando babel-plugin-transform-optional-chaining .
Eu julgaria esse comportamento esperado, mas é discutível.
ping @greegus
Acabei de encontrar isso e foi definitivamente inesperado para mim que $attrs
deveria ser undefined
.
Por exemplo, se você estivesse escrevendo um aplicativo de tarefas que começa sem todos, seria muito estranho fazer a lista começar como undefined
vez de []
. Você teria que adicionar if
instruções (ou encadeamento opcional) em todo o seu aplicativo. Este caso é semelhante.
Para casos de nicho quando um usuário deseja verificar se existe algum $attrs
, ainda seria possível usar Object.keys($attrs).length
, então esse caso ainda é coberto.
A parte que realmente me convence de que este é um bug, é que $attrs
_is_ é definido como um objeto vazio quando um prop é passado para um componente - como o OP aponta. Portanto, atualmente, verificar se existe algum $attrs
exigiria as duas estratégias:
$attrs && Object.keys($attrs).length
@chrisvfritz me convenceu - é um bug.
@LinusBorg Parece que ninguém está trabalhando neste bug atualmente. Posso ter um relatório para isso?
Certo!
Comentários muito úteis
Acabei de encontrar isso e foi definitivamente inesperado para mim que
$attrs
deveria serundefined
.Por exemplo, se você estivesse escrevendo um aplicativo de tarefas que começa sem todos, seria muito estranho fazer a lista começar como
undefined
vez de[]
. Você teria que adicionarif
instruções (ou encadeamento opcional) em todo o seu aplicativo. Este caso é semelhante.Para casos de nicho quando um usuário deseja verificar se existe algum
$attrs
, ainda seria possível usarObject.keys($attrs).length
, então esse caso ainda é coberto.A parte que realmente me convence de que este é um bug, é que
$attrs
_is_ é definido como um objeto vazio quando um prop é passado para um componente - como o OP aponta. Portanto, atualmente, verificar se existe algum$attrs
exigiria as duas estratégias: