Vue: $ attrs tidak ditentukan saat komponen tidak memiliki properti

Dibuat pada 1 Agu 2017  ·  8Komentar  ·  Sumber: vuejs/vue

Versi: kapan

2.4.2

Tautan reproduksi

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

Langkah-langkah untuk mereproduksi

Akses $ attrs sebagai objek dalam konteks komponen, jika tidak ada alat peraga yang disediakan.

Apa yang diharapkan?

$ attrs adalah objek yang berisi props yang tidak dikenal. Oleh karena itu saya mengharapkan objek kosong, ketika tidak ada properti yang ditentukan pada tag komponen.

Apa yang sebenarnya terjadi?

$ attrs tidak ditentukan

bug

Komentar yang paling membantu

Baru saja mengalami ini dan itu pasti tidak terduga bagi saya bahwa $attrs seharusnya menjadi undefined .

Misalnya, jika Anda menulis aplikasi rencana yang dimulai tanpa todos, akan sangat aneh jika daftar dimulai dengan undefined bukan [] . Anda harus menambahkan pernyataan if (atau rangkaian opsional) di seluruh aplikasi Anda. Kasus ini serupa.

Untuk kasus khusus ketika pengguna ingin memeriksa apakah ada $attrs , masih mungkin untuk menggunakan Object.keys($attrs).length , jadi kasing itu masih tertutup.

Bagian yang benar-benar meyakinkan saya bahwa ini adalah bug, adalah bahwa $attrs _is_ disetel ke objek kosong saat prop diteruskan ke komponen - seperti yang ditunjukkan OP. Jadi saat ini, benar-benar memeriksa apakah ada $attrs akan membutuhkan kedua strategi:

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

Semua 8 komentar

Karena penasaran, masalah apa yang Anda hadapi dengan memiliki $attrs tidak ditentukan? Apakah Anda mengakses $attrs.something ? (jika demikian, mengapa?)

sunting: Saya juga bertanya karena memiliki $attrs sama tidak terdefinisi ketika tidak ada attrs sebenarnya bisa berguna

@greegus , jika Anda melakukan sesuatu seperti if ($attrs.myProp) Anda dapat melakukan if ($attrs?.myProp) dengan menggunakan babel-plugin-transform-optional-chaining .

Saya akan menilai ini sebagai perilaku yang diharapkan, tetapi itu bisa diperdebatkan.

ping @gus

Baru saja mengalami ini dan itu pasti tidak terduga bagi saya bahwa $attrs seharusnya menjadi undefined .

Misalnya, jika Anda menulis aplikasi rencana yang dimulai tanpa todos, akan sangat aneh jika daftar dimulai dengan undefined bukan [] . Anda harus menambahkan pernyataan if (atau rangkaian opsional) di seluruh aplikasi Anda. Kasus ini serupa.

Untuk kasus khusus ketika pengguna ingin memeriksa apakah ada $attrs , masih mungkin untuk menggunakan Object.keys($attrs).length , jadi kasing itu masih tertutup.

Bagian yang benar-benar meyakinkan saya bahwa ini adalah bug, adalah bahwa $attrs _is_ disetel ke objek kosong saat prop diteruskan ke komponen - seperti yang ditunjukkan OP. Jadi saat ini, benar-benar memeriksa apakah ada $attrs akan membutuhkan kedua strategi:

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

@chrisvfritz meyakinkan saya - itu bug.

@LinusBorg Sepertinya tidak ada yang menangani bug ini saat ini. Apa boleh saya minta pr untuk ini?

Tentu!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat