Meneroka cabaran pemaparan bersyarat dalam komponen tersuai React
P粉301523298
2023-08-18 15:58:43
<p>Saya menghadapi masalah dengan pemaparan bersyarat dalam komponen tersuai dalam aplikasi React saya. Saya telah berusaha untuk mencipta komponen tersuai untuk pemaparan bersyarat yang hanya menghasilkan kandungan apabila syarat tertentu dipenuhi. Berikut ialah kod semasa saya: </p>
<pre class="brush:js;toolbar:false;">import React daripada 'react';
function ConditionalRenderComponent({ condition, children }) {
kembali (
<div>
{keadaan &&
</div>
);
}
eksport lalai ConditionalRenderComponent;
</pra>
<p>Semasa menggunakan komponen tersuai ini, saya perhatikan bahawa kandungan itu melalui atribut <code>children</code> walaupun <code>condition</code>salah</code> diakses dan dilaksanakan. Ini berbeza daripada tingkah laku menggunakan <kod>syarat &&<div></div></kod> Akses kepada kandungan disekat dengan betul. </p>
<p><strong>Begini cara saya menggunakan komponen tersuai:</strong></p>
<pre class="brush:js;toolbar:false;">import React, { useState, useEffect } daripada 'react';
import ConditionalRenderComponent daripada './ConditionalRenderComponent';
function App() {
const [userData, setUserData] = useState(null);
const isLoggedIn = userData !== null;
useEffect(() => {
setTimeout(() => {
setUserData({
nama pengguna: 'john_doe',
e-mel: 'john@example.com'
});
}, 1000);
}, []);
kembali (
<div>
<h1>Selamat datang ke apl saya</h1>
<ConditionalRenderComponent condition={isLoggedIn}>
<div>
<p>Helo, {userData.username}! </p>
<p>E-mel anda: {userData.email}</p>
</div>
</ConditionalRenderComponent>
{!isLoggedIn && <p>Sila log masuk untuk mengakses data pengguna. </p>}
</div>
);
}
eksport Apl lalai;
</pra>
<p>Dalam contoh di atas, <code>userData</code> pada mulanya <code>null</code> dan kemudian diisi dengan data yang diambil dari pelayan. Syarat <kod>isLoggedIn</code> </p>
<p>Walau bagaimanapun, walaupun syarat <kod>Masuk</kod> adalah <kod>palsu</kod> untuk mengakses dan Memaparkan <code>userData</code>. Ini mengakibatkan mesej ralat: "TypeError: Tidak boleh membaca sifat null (membaca 'nama pengguna')". </p>
<p><strong>Perbandingan dengan pemaparan bersyarat standard: </strong></p>
<p>Berikut ialah perbandingan tingkah laku menggunakan pendekatan <kod>keadaan <div></div></code>
<pre class="brush:js;toolbar:false;">// Penyampaian bersyarat standard
{isLoggedIn &&
<div>
<p>Helo, {userData.username}! </p>
<p>E-mel anda: {userData.email}</p>
</div>
)}
</pra>
<p>Seperti yang ditunjukkan dalam kod di atas, menggunakan kaedah standard dengan betul menyekat akses kepada nilai <code>userData</code> apabila syaratnya <code>false</code>. </p>
<p>Saya tidak pasti mengapa perbezaan tingkah laku ini berlaku apabila menggunakan komponen tersuai dengan atribut <kod>kanak</kod> Saya telah mencuba menyahpepijat dan mencari penyelesaian tetapi saya belum menemui jawapan yang jelas lagi. </p>
<p> Sebarang pandangan atau cadangan tentang sebab ini mungkin berlaku dan cara mengubah suai komponen tersuai untuk mencapai tingkah laku pemaparan bersyarat yang diharapkan untuk atribut <kod>kanak</kod> </p>
<p>Terima kasih terlebih dahulu atas bantuan anda! </p>
Mengapa ini berlaku?
Jadi saya rasa sebab mengapa ini berlaku ialah, dalam komponen
ConditionalRenderComponent
, elemen anak dihantar kepadanya sebagai atribut (seperti parameter kepada fungsi). Ungkapan JSX dinilai sebagai argumen kepada fungsi.Ini bermakna walaupunkeadaan palsu,
.condition
为false,children
在传递给ConditionalRenderComponent
masih akan dinilai sebelum dihantar ke fungsiPlayStation
(在你的左手)和数学试卷成绩
Anda memberikanchildren
Memandangkan kanak-kanak itu sudah boleh melihat PlayStation di tangan kiri anda (luluschildren
Sekarang, jika anda mengepalkan penumbuk anda, ia sama dengan hantaranchildren
。这样,您可以确保只有在condition
为真时才会评估children
Kami mengubah suai komponen tersuai kami dengan menggunakan fungsi sebagai elemen kanak-kanak dan bukannya memaparkan terus dalam komponenhanya akan dinilai jikakeadaan adalah benar.
Perubahan kepada ConditionalRenderComponent
🎜Perubahan kepada pemaparan ConditionalRenderComponent🎜Saya tidak mengesyorkan mencipta komponen untuk pemaparan bersyarat, tetapi jika anda mahu melakukannya, anda boleh menggunakan corak sifat pemaparan supaya fungsi itu hanya dipanggil apabila syarat itu benar. Ini menghalang ungkapan daripada dinilai serta-merta.