Lebih
Apa artinya ...sisanya dalam Bereaksi BEJ
Melihat ini Bereaksi Router Dom v4 contoh https://reacttraining.com/react-router/web/example/auth-workflow saya melihat bahwa PrivateRoute komponen destructures istirahat prop seperti ini
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
fakeAuth.isAuthenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)}/>
)
Aku ingin menjadi yakin bahwa { komponen: Komponen, ...sisanya }
berarti:
Dari
alat peraga
, mendapatkan Komponen prop dan kemudian semua alat peraga lainnya yang diberikan kepada anda, dan mengubah namaalat peraga
untukistirahat
sehingga anda dapat menghindari penamaan masalah dengan alat peraga melewati Rute yangmembuat
fungsi
Aku benar?
51
3
Maaf, saya menyadari bahwa jawaban pertama saya (sementara mudah-mudahan masih menyediakan berguna/konteks tambahan) doesn't menjawab pertanyaan anda. Mari saya coba lagi.
Anda bertanya:
Anda're interpretasi ini tidak cukup benar. Berdasarkan pikiran anda meskipun, itu terdengar seperti anda're setidaknya menyadari fakta bahwa apa yang terjadi di sini berjumlah semacam objek destructuring (lihat jawaban kedua dan komentar di sana untuk penjelasan lebih lanjut).
Untuk memberikan penjelasan yang akurat, let's memecah
{ komponen: Komponen, ...sisanya }
ekspresi ke dalam dua operasi terpisah:komponen
properti yang didefinisikan padaalat peraga
(Note: huruf kecil component) dan menetapkan ke lokasi baru di negara kita sebutKomponen
(Note: modal Component).alat peraga
objek dan mengumpulkan mereka dalam sebuah argumen yang disebutistirahat
.Yang penting adalah bahwa anda're TIDAK mengganti nama
alat peraga
untukistirahat
. (Dan juga tidak harus dilakukan dengan mencoba untuk "menghindari penamaan masalah denganalat peraga
melewati Rute yangmembuat
fungsi".)Anda hanya menarik dari the rest (maka mengapa argumen yang bernama) dari sifat-sifat yang didefinisikan pada
alat peraga
objek ke dalam sebuah argumen baru yang disebutistirahat
.Contoh Penggunaan
Berikut ini's contoh. Let's asumsikan kita memiliki objek `myObj` didefinisikan sebagai berikut:Untuk contoh ini, mungkin membantu untuk hanya memikirkan
alat peraga
karena memiliki struktur yang sama (i.e., sifat-sifat dan nilai-nilai) seperti yang ditunjukkan padamyObj
. Sekarang, let's menulis tugas berikut.Pernyataan di atas jumlah kedua deklarasi dan penugasan dari dua variabel (atau, saya kira, konstanta). Pernyataan tersebut dapat dipikirkan sebagai:
Logging
Username
danistirahat
untukkonsol
akan mengkonfirmasi ini. Kami memiliki yang berikut:Catatan
Anda mungkin bertanya-tanya:Ya, tampaknya cukup sepele. Dan, sementara itu adalah standar Bereaksi praktek, ada's alasan semua Facebook's dokumentasi pada kerangka yang tertulis seperti itu. Yaitu, memanfaatkan komponen kustom yang diberikan dengan BEJ kurang praktek per se dari itu adalah sebuah kebutuhan. Bereaksi, atau lebih benar, BEJ adalah case-sensitive. Komponen kustom dimasukkan tanpa dikapitalisasi huruf pertama tidak diberikan ke DOM. Ini hanya bagaimana Bereaksi telah didefinisikan sendiri untuk mengidentifikasi komponen kustom. Dengan demikian, kalau misalnya tidak juga berganti nama menjadi
komponen
properti yang ditarik darialat peraga
untukKomponen
ini,<komponen {...alat peraga} />
ekspresi akan gagal untuk membuat benar.Hal ini memungkinkan anda untuk "tidur" semua
alat peraga
dalam satu ungkapan singkat. Misalnya, let's menganggapalat peraga
yang diterima olehPrivateRoute
komponen terlihat sepertiJika anda ingin lebih tangan dari barang-barang ini (i.e.,
thing1
danthing2
) ke bersarang<Komponen />
tag dan anda tidak't akrab dengan objek menyebar sintaks, anda mungkin menulis:Namun,
{ ...alat peraga }
sintaks menyingkirkan seperti bertele-tele dengan memungkinkan anda untuk spread andaalat peraga
objek dengan cara yang sama yang mungkin spread sebuah array dari nilai-nilai (e.g.,[...vals]
). Dengan kata lain, JSX ekspresi di bawah dan yang di atas yang benar-benar setara.Mari kita tetap sederhana. Dalam javaScript, jika kunci,pasangan nilai yang sama, obj={rekening:rekening} adalah sama seperti obj={rekening}. Jadi ketika melewati alat peraga dari orang tua kepada anak komponen:
anda akan melewati sisa alat peraga sebagai