Props dalam React mungkin terasa mudah, tetapi salah mengendalikannya boleh melambatkan apl anda untuk merangkak. Lama kelamaan, selepas mengekod dan melihat beberapa projek React, saya telah melihat sepuluh kesilapan berkaitan prop yang terus muncul. Isu ini mungkin bersembunyi dalam kod anda juga.
Namun, jangan risau—kami bersedia untuk membetulkannya bersama-sama. Mari selami dan jadikan apl React anda lebih pantas dan cekap!
1} Berhenti Melepasi Keseluruhan Objek Apabila Hanya Sifat Tertentu Diperlukan
Melalukan keseluruhan objek sebagai prop apabila komponen anda hanya memerlukan beberapa sifat membawa kepada pemaparan semula yang tidak perlu pada bila-bila masa objek itu dikemas kini—walaupun nilai yang anda gunakan kekal sama.
// Not ideal function UserProfile({ user }) { // Only uses name and email return ( <div> <h2>{user.name}</h2> <p>{user.email}</p> </div> ); } // Better function UserProfile({ name, email }) { return ( <div> <h2>{name}</h2> <p>{email}</p> </div> ); }
Hanya lulus apa yang perlu. Dengan memastikan prop fokus dan minimum, anda akan mengurangkan kekerapan komponen dipaparkan semula, memberikan apl anda peningkatan prestasi yang ketara.
2} Elakkan Mencipta Objek Baharu dalam Props pada Setiap Render
Satu lagi punca tersembunyi ialah mencipta objek sebaris dalam prop. Apabila anda melakukan ini, anda membuat rujukan objek baharu setiap kali komponen anda dipaparkan. Rujukan baharu ini memaksa komponen anak untuk dipaparkan semula, walaupun nilainya sama.
// Not efficient function ParentComponent() { return ( <ChildComponent styles={{ margin: '20px', padding: '10px' }} config={{ theme: 'dark', animate: true }} /> ); } // Smarter approach const styles = { margin: '20px', padding: '10px' }; const config = { theme: 'dark', animate: true }; function ParentComponent() { return ( <ChildComponent styles={styles} config={config} /> ); }
Ambil definisi objek di luar komponen anda atau gunakan useMemo untuk yang dibuat secara dinamik. Ia adalah tweak mudah, tetapi ia boleh mengurangkan pemaparan yang tidak perlu secara mendadak dan memastikan semuanya berjalan lancar.
3} Elakkan Penyebaran Props Tidak Perlu
Menggunakan penyebaran prop (...props) mungkin terasa mudah, tetapi selalunya ia lebih mendatangkan mudarat daripada kebaikan. Ia menurunkan prop yang anda tidak perlukan, menjadikan komponen anda lebih sukar untuk nyahpepijat, malah boleh mencetuskan pemaparan semula yang tidak diingini.
// Inefficient function Parent() { const props = { name: 'John', age: 30, email: 'john@email.com', phone: '1234567890', address: '123 Street' }; return <UserCard {...props} />; } // A better way function Parent() { const props = { name: 'John', age: 30, email: 'john@email.com', phone: '1234567890', address: '123 Street' }; return <UserCard name={props.name} email={props.email} />; }
Dengan menyatakan hanya prop yang anda perlukan, anda menjadikan komponen anda lebih bersih dan lebih mudah diramal. Ini memastikan apl anda lebih pantas dan lebih mudah diselenggara.
4} Sentiasa Menghafal Alat Panggilan Balik
Fungsi panggil balik yang tidak diingati boleh menjejaskan prestasi secara senyap. Setiap kali komponen anda dipaparkan semula, tika fungsi baharu dibuat. Ini boleh memecahkan pengoptimuman dalam komponen anak menggunakan React.memo atau menyebabkan pemaparan semula yang tidak perlu.
// Not optimal function TodoList() { const handleClick = (id) => { // handle click }; return <TodoItem onClick={handleClick} />; } // Optimal approach function TodoList() { const handleClick = useCallback((id) => { // handle click }, []); // Include dependencies if needed return <TodoItem onClick={handleClick} />; }
Balut prop panggil balik dengan useCallback apabila menghantarnya ke komponen yang dihafal atau menggunakannya dalam useEffect. Ini memastikan rujukan yang stabil dan mengelakkan kemas kini yang tidak perlu.
5} Hentikan Penggerudian Prop Melalui Pelbagai Aras
Melalui prop melalui beberapa komponen yang tidak menggunakannya adalah cara yang pasti untuk membuat pemaparan semula yang tidak perlu dan kod yang tidak kemas. Ini dipanggil penggerudian prop dan ia boleh menjadikan apl anda lebih sukar untuk diurus apabila ia berkembang.
// Not ideal function UserProfile({ user }) { // Only uses name and email return ( <div> <h2>{user.name}</h2> <p>{user.email}</p> </div> ); } // Better function UserProfile({ name, email }) { return ( <div> <h2>{name}</h2> <p>{email}</p> </div> ); }
Daripada menghantar prop ke bawah melalui setiap lapisan, gunakan alat seperti Konteks Reaksi atau perpustakaan seperti Zustand untuk mengurus data bersarang dalam. Pendekatan ini memastikan kod anda lebih bersih dan mengelakkan pemaparan yang tidak perlu.
6} Jangan Gunakan Indeks Tatasusunan sebagai Kunci
Menggunakan indeks tatasusunan sebagai kunci mungkin kelihatan tidak berbahaya, tetapi ia boleh menyebabkan pepijat dan masalah prestasi yang halus, terutamanya dalam senarai di mana item disusun semula atau dialih keluar.
// Not efficient function ParentComponent() { return ( <ChildComponent styles={{ margin: '20px', padding: '10px' }} config={{ theme: 'dark', animate: true }} /> ); } // Smarter approach const styles = { margin: '20px', padding: '10px' }; const config = { theme: 'dark', animate: true }; function ParentComponent() { return ( <ChildComponent styles={styles} config={config} /> ); }
Sentiasa gunakan pengecam unik yang stabil sebagai kunci. Ini membantu React menjejaki komponen anda dengan betul, memastikan kemas kini yang lancar dan mengekalkan keadaan dengan tepat.
7} Berhenti Menyalurkan Alat Peraga yang Tidak Digunakan
Melalui prop yang tidak perlu boleh mengembang komponen anda dan mencetuskan pemaparan semula yang boleh dielakkan. Setiap prop tambahan menambah pada overhed, walaupun ia tidak digunakan dalam komponen.
// Inefficient function Parent() { const props = { name: 'John', age: 30, email: 'john@email.com', phone: '1234567890', address: '123 Street' }; return <UserCard {...props} />; } // A better way function Parent() { const props = { name: 'John', age: 30, email: 'john@email.com', phone: '1234567890', address: '123 Street' }; return <UserCard name={props.name} email={props.email} />; }
Faktor semula komponen anda dengan kerap dan keluarkan sebarang prop yang tidak penting. Komponen yang lebih ramping bermakna kurang pemaparan semula dan apl yang lebih pantas.
8} Sentiasa Gunakan Jenis Prop yang Betul
Melangkau PropTypes atau TypeScript ialah kesilapan biasa yang boleh membawa kepada pepijat dan ralat masa jalan. Alat ini membantu menangkap isu berkaitan prop semasa pembangunan, menjadikan apl anda lebih mantap dan lebih mudah untuk nyahpepijat.
// Not optimal function TodoList() { const handleClick = (id) => { // handle click }; return <TodoItem onClick={handleClick} />; } // Optimal approach function TodoList() { const handleClick = useCallback((id) => { // handle click }, []); // Include dependencies if needed return <TodoItem onClick={handleClick} />; }
Menggunakan TypeScript atau PropTypes bukan sahaja membantu anda mengesan masalah lebih awal tetapi juga menjadikan komponen anda lebih mudah diramal dan diselenggara.
9} Jangan Sekali-kali Mengubah Props Secara Terus
Menukar prop secara langsung bertentangan dengan prinsip kebolehubah React, selalunya membawa kepada pepijat yang tidak dijangka dan kemas kini terlepas.
// Not ideal function GrandParent({ user }) { return <Parent user={user} />; } function Parent({ user }) { return <Child user={user} />; } function Child({ user }) { return <span>{user.name}</span>; } // Smarter solution function App() { const [user] = useState(userData); return ( <UserContext.Provider value={user}> <GrandParent /> </UserContext.Provider> ); } function Child() { const user = useContext(UserContext); return <span>{user.name}</span>; }
Pastikan prop tidak boleh diubah dengan menggunakan fungsi atau kemas kini keadaan sebaliknya. Ini memastikan React boleh menjejaki perubahan dengan betul dan memaparkan semula komponen apabila diperlukan.
Kesimpulan
Kesilapan prop ini mungkin kelihatan kecil, tetapi ia bertindan untuk menimbulkan isu prestasi yang serius dari semasa ke semasa. Untuk memastikan apl React anda berjalan lancar:
Alat untuk membantu anda mengoptimumkan:
Selesaikan isu ini hari ini dan anda akan perasan apl anda berasa lebih pantas, lebih responsif dan lebih mudah diselenggara.
Selamat mengekod!!
Atas ialah kandungan terperinci eact Kesilapan Props Yang Mencederakan Prestasi Apl Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!