Saya melihat bahwa yang berikut ini baik-baik saja:
const Tab = connect( mapState, mapDispatch )( Tabs );
export default Tab;
Namun, ini tidak benar:
export default const Tab = connect( mapState, mapDispatch )( Tabs );
Namun ini baik-baik saja:
export default Tab = connect( mapState, mapDispatch )( Tabs );
Bisakah ini dijelaskan, mengapa const
tidak valid export default
? Apakah ini merupakan tambahan yang tidak perlu & sesuatu yang dinyatakan sebagai export default
dianggap const
atau itu?
export default Tab = connect( mapState, mapDispatch )( Tabs );
seharusnyaexport default connect( mapState, mapDispatch )( Tabs );
. Anda mengekspor hasil pemanggilan fungsi, bukan Tab variabel.Jawaban:
const
sepertilet
, itu adalah LexicalDeclaration ( VariableStatement, Declaration ) yang digunakan untuk mendefinisikan pengidentifikasi di blok Anda.Anda mencoba mencampur ini dengan
default
kata kunci, yang mengharapkan HoistableDeclaration, ClassDeclaration atau AssignmentExpression untuk mengikutinya.Karena itu, ini adalah SyntaxError .
Jika Anda ingin
const
sesuatu, Anda harus memberikan pengenal dan tidak digunakandefault
.export
dengan sendirinya menerima VariableStatement atau Deklarasi di sebelah kanannya.AFAIK ekspor itu sendiri tidak boleh menambahkan apa pun ke ruang lingkup Anda saat ini.
Tab
menjadi AssignmentExpression karena diberi nama default ?Berikut
Tab = connect( mapState, mapDispatch )( Tabs );
adalah Tugas Penugasan .sumber
"AFAIK the export in itself should not add anything to your current scope"
Ini tidak begitu akurat, karenaexport const a = 1
menambaha
konteks Anda saat ini. Dan bahkan denganexport default
dalam kasus kelas, karenaexport default class MyClass {}
menambahMyClass
konteks Anda saat ini juga.let a; export default a;
dan kemudian memperbarui variabel ketika sudah diimpor ke modul lain, mengapa variabel ekspor standar tidak diperbarui?const foo = function bar() {}
dan jugaconst Foo = class Bar {}
, tetapi tidakconst foo = const bar = 1
. Samaexport default
halnya, sama seperticonst foo =
.Anda juga dapat melakukan sesuatu seperti ini jika Anda ingin mengekspor default / let, alih-alih
Anda dapat melakukan sesuatu seperti ini, yang saya tidak suka secara pribadi.
sumber
Jika nama komponen dijelaskan dalam nama file
MyComponent.js
, jangan beri nama komponen, jaga agar kode tetap ramping.Pembaruan : Karena ini label sebagai tidak dikenal dalam pelacakan tumpukan, itu tidak dianjurkan
sumber
Unknown
mana - mana di mana ekspor default tidak disebutkan namanyaJawaban Paul adalah yang Anda cari. Namun, secara praktis, saya pikir Anda mungkin tertarik dengan pola yang saya gunakan di aplikasi React + Redux saya sendiri.
Berikut ini adalah contoh sederhana dari salah satu rute saya, yang menunjukkan bagaimana Anda dapat mendefinisikan komponen Anda dan mengekspornya sebagai default dengan satu pernyataan:
(Catatan: Saya menggunakan istilah "Adegan" untuk komponen tingkat atas dari rute apa pun).
Saya harap ini bermanfaat. Saya pikir ini jauh lebih bersih daripada yang konvensional
connect( mapState, mapDispatch )( BareComponent )
sumber
@connect
adalah satu-satunya dekorator yang saya gunakan, saya hanya menggunakannya dengan komponen yang melekat pada toko redux, hampir setiap dari mereka adalah "rute," dan hampir setiap rute harus memiliki status (dan karena itu tidak dapat menjadi fungsi murni) .Jawaban yang dibagikan oleh Paul adalah yang terbaik. Untuk memperluas lebih lanjut,
Hanya ada satu ekspor standar per file. Padahal bisa ada lebih dari satu ekspor const. Variabel default dapat diimpor dengan nama apa pun, sedangkan variabel const dapat diimpor dengan nama tertentu itu.
Di sisi impor kita perlu mengimpornya seperti ini:
atau
Dengan impor pertama, variabel const diimpor sedangkan, dengan yang kedua, yang default akan diimpor.
sumber
default
pada dasarnyaconst someVariableName
Anda tidak memerlukan pengenal yang dinamai karena ini adalah ekspor default untuk file tersebut dan Anda dapat menamainya apa pun yang Anda inginkan ketika Anda mengimpornya, jadi
default
hanya mengkondensasi penugasan variabel menjadi satu kata kunci tunggal.sumber
Bagi saya ini hanyalah salah satu dari banyak keanehan (penekanan pada idio (t)) naskah yang menyebabkan orang menarik rambut mereka dan mengutuk pengembang. Mungkin mereka bisa bekerja dengan membuat pesan kesalahan yang lebih dimengerti.
sumber