Rumah > Soal Jawab > teks badan
P粉5338986942023-08-19 15:04:37
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 walaupun condition
为false,children
在传递给ConditionalRenderComponent
masih akan dinilai sebelum dihantar ke fungsi
PlayStation
(在你的左手)和数学试卷成绩
Anda memberikan
children
Memandangkan kanak-kanak itu sudah boleh melihat PlayStation di tangan kiri anda (lulus
children
Sekarang, jika anda mengepalkan penumbuk anda, ia sama dengan hantaran
children
。这样,您可以确保只有在condition
为真时才会评估children
Kami mengubah suai komponen tersuai kami dengan menggunakan fungsi sebagai elemen kanak-kanak dan bukannya memaparkan terus dalam komponen
function ConditionalRenderComponent({ condition, children }) { return ( <div> {condition && children()} </div> ); }🎜Perubahan kepada pemaparan ConditionalRenderComponent🎜
<ConditionalRenderComponent condition={isLoggedIn}> {() => ( <div> <p>你好,{userData.username}!</p> <p>你的电子邮件:{userData.email}</p> </div> )} </ConditionalRenderComponent>
P粉5433443812023-08-19 13:02:01
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.
function If({ condition, render }) { if (!condition) return null; return render(); } export default function App() { const [state, setState] = useState(null); useEffect(() => { wait(1000).then(() => { setState({ hello: "world" }); }); }, []); return ( <div className="App"> <h1>Hello CodeSandbox</h1> <If condition={Boolean(state)} render={() => <p>{state.hello}</p>} /> </div> ); }