


Kod Reaksi Pemfaktoran Semula adalah seperti mengubah dapur yang huru-hara menjadi syurga kuliner yang tersusun. Ini mengenai memperbaik struktur, kebolehselenggaraan dan prestasi apl anda tanpa mengubah fungsinya. Sama ada anda sedang bertarung dengan komponen kembung atau logik keadaan kusut, refactor yang dirancang dengan baik mengubah pangkalan kod anda menjadi mesin yang anggun dan cekap.
Blog ini mendedahkan senario pemfaktoran semula biasa, menyediakan penyelesaian yang boleh diambil tindakan dan melengkapkan anda untuk membuka kunci potensi sebenar apl React anda.
Saya. Apakah Pemfaktoran Semula dan Mengapa Ia Penting?
Pemfaktoran semula memperbaik struktur kod anda tanpa mengubah fungsinya. Ini bukan tentang membetulkan pepijat atau menambah ciri—ini tentang menjadikan kod anda lebih baik untuk manusia dan mesin.
Kenapa Refactor?
- Kebolehbacaan: Menyahpepijat kod pada 3 PG menjadi lebih mudah apabila ia dibaca seperti novel yang bagus dan bukannya teka-teki samar.
- Kebolehselenggaraan: Pangkalan kod yang bersih menjimatkan berjam-jam masa onboarding dan mempercepatkan kemas kini.
- Prestasi: Kod yang lebih bersih sering diterjemahkan kepada masa pemuatan yang lebih pantas dan pengalaman pengguna yang lebih lancar.
? Petua Pro: Elakkan pengoptimuman pramatang. Faktorkan semula apabila terdapat keperluan yang jelas, seperti meningkatkan pengalaman pembangun atau menangani pemaparan yang perlahan.
II. Menghidu Bau Kod
Bau kod ialah isyarat halus ketidakcekapan atau kerumitan. Ia bukan ralat, tetapi ia menunjukkan bahagian yang memerlukan penambahbaikan.
Bau Kod Reaksi Biasa
-
Komponen Kembung
- Masalah: Satu komponen mengendalikan terlalu banyak tanggungjawab, seperti mengambil data, rendering dan mengendalikan acara.
function ProductPage() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); const handleAddToCart = () => { ... }; return ( <div> {data.map(item => <productitem key="{item.id}" item="{item}"></productitem>)} <button onclick="{handleAddToCart}">Add to Cart</button> </div> ); }
- Penyelesaian: Pecahkan kepada komponen yang lebih kecil dan fokus.
function ProductPage() { return ( <div> <productlist></productlist> <cartbutton></cartbutton> </div> ); } function ProductList() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); return data.map(item => <productitem key="{item.id}" item="{item}"></productitem>); } function CartButton() { const handleAddToCart = () => { ... }; return <button onclick="{handleAddToCart}">Add to Cart</button>; }
-
Penggerudian Prop
- Masalah: Melepasi prop melalui berbilang lapisan komponen.
<app> <productlist product="{product}"></productlist> </app>
- Penyelesaian 1: Gunakan gubahan.
<productlist> <productitem product="{product}"></productitem> </productlist>
- Penyelesaian 2: Gunakan Konteks.
const ProductContext = React.createContext(); function App() { const [product, setProduct] = useState({ id: 1, name: 'Example Product' }); // Example state return ( <productcontext.provider value="{product}"> <productlist></productlist> </productcontext.provider> ); } function ProductList() { const product = useContext(ProductContext); return <productitem product="{product}"></productitem>; }
-
Neraka Ternary Bersarang
- Masalah: Paparan bersyarat yang kompleks menggunakan ternari bersarang.
return condition1 ? a : condition2 ? b : condition3 ? c : d;
- Penyelesaian: Refactor menggunakan fungsi pembantu atau pernyataan suis.
function renderContent(condition) { switch (condition) { case 1: return a; case 2: return b; case 3: return c; default: return d; } } return renderContent(condition);
-
Logik Pendua
- Masalah: Mengulang logik yang sama merentas komponen.
function calculateTotal(cart) { return cart.reduce((total, item) => total + item.price, 0); }
- Penyelesaian: Alihkan logik yang dikongsi ke dalam utiliti boleh guna semula atau cangkuk tersuai.
function calculateTotalPrice(cart) { return cart.reduce((total, item) => total + item.price, 0); } function useTotalPrice(cart) { return useMemo(() => calculateTotalPrice(cart), [cart]); }
-
Keadaan Berlebihan
- Masalah: Menguruskan keadaan terbitan secara langsung.
const [isLoggedIn, setIsLoggedIn] = useState(user !== null);
- Penyelesaian: Sebaliknya gunakan keadaan terbitan.
const isLoggedIn = !!user; // Converts 'user' to boolean
III. Memudahkan Pengurusan Negeri
Pengurusan negeri adalah penting tetapi boleh menjadi huru-hara dengan cepat. Begini cara untuk memudahkannya:
Keadaan Terbitan: Kira, Jangan Simpan
- Masalah: Menyimpan keadaan berlebihan.
- Penyelesaian: Kira nilai terbitan terus daripada sumber.
const [cartItems, setCartItems] = useState([]); const totalPrice = cartItems.reduce((total, item) => total + item.price, 0);
Gunakan useReducer untuk Keadaan Kompleks
- Masalah: Berbilang keadaan saling bergantung.
- Penyelesaian: Gunakan useReducer.
const initialState = { count: 0 }; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; default: return state; } } const [state, dispatch] = useReducer(reducer, initialState);
Kolokasi Negeri
- Masalah: Keadaan global digunakan untuk data setempat.
- Penyelesaian: Alihkan keadaan lebih dekat ke tempat yang diperlukan.
// Before: function App() { const [filter, setFilter] = useState(''); return <productlist filter="{filter}" onfilterchange="{setFilter}"></productlist>; } // After: function ProductList() { const [filter, setFilter] = useState(''); return <filterinput value="{filter}" onchange="{setFilter}"></filterinput>; }
IV. Komponen Pemfaktoran Semula
Komponen harus melakukan satu kerja dan melakukannya dengan baik. Contohnya:
Satu Kerja Setiap Komponen
function MemberCard({ member }) { return ( <div> <summary member="{member}"></summary> <seemore details="{member.details}"></seemore> </div> ); }
V. Pengoptimuman Prestasi
React Profiler
Gunakan Profiler untuk mengenal pasti kesesakan. Aksesnya dalam Alat Pembangun di bawah "Profiler."
Hafazan
Optimumkan pengiraan mahal:
function ProductPage() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); const handleAddToCart = () => { ... }; return ( <div> {data.map(item => <productitem key="{item.id}" item="{item}"></productitem>)} <button onclick="{handleAddToCart}">Add to Cart</button> </div> ); }
Nota: Elakkan menggunakan memoisasi secara berlebihan untuk kebergantungan yang kerap dikemas kini.
VI. Pemfaktoran semula untuk Kebolehujian
Tulis ujian berpusatkan pengguna:
function ProductPage() { return ( <div> <productlist></productlist> <cartbutton></cartbutton> </div> ); } function ProductList() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); return data.map(item => <productitem key="{item.id}" item="{item}"></productitem>); } function CartButton() { const handleAddToCart = () => { ... }; return <button onclick="{handleAddToCart}">Add to Cart</button>; }
VII. Sentuhan Akhir untuk Kebolehselenggaraan
- Susun mengikut ciri:
<app> <productlist product="{product}"></productlist> </app>
- Gunakan import mutlak:
<productlist> <productitem product="{product}"></productitem> </productlist>
VIII. Lembaran curang
Category | Tip |
---|---|
Code Smells | Split bloated components; avoid prop drilling. |
State Management | Use derived state; colocate state. |
Performance | Use Profiler; optimize Context values. |
Testing | Test behavior, not implementation details. |
Petua
Atas ialah kandungan terperinci Tindak Balas Pemfaktoran Semula: Menjinakkan Kekacauan, Satu Komponen pada Satu Masa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

Tutorial ini menunjukkan kepada anda bagaimana untuk mengintegrasikan API carian Google tersuai ke dalam blog atau laman web anda, menawarkan pengalaman carian yang lebih halus daripada fungsi carian tema WordPress standard. Ia menghairankan mudah! Anda akan dapat menyekat carian ke y

Jadi di sini anda, bersedia untuk mempelajari semua perkara ini yang dipanggil Ajax. Tetapi, apa sebenarnya? Istilah Ajax merujuk kepada kumpulan teknologi longgar yang digunakan untuk membuat kandungan web yang dinamik dan interaktif. Istilah Ajax, yang asalnya dicipta oleh Jesse J

Siri artikel ini ditulis semula pada pertengahan 2017 dengan maklumat terkini dan contoh segar. Dalam contoh JSON ini, kita akan melihat bagaimana kita dapat menyimpan nilai mudah dalam fail menggunakan format JSON. Menggunakan notasi pasangan nilai utama, kami boleh menyimpan apa-apa jenis

Leverage JQuery untuk Layouts Laman Web yang mudah: 8 Plugin Essential JQuery memudahkan susun atur laman web dengan ketara. Artikel ini menyoroti lapan plugin jQuery yang kuat yang menyelaraskan proses, terutamanya berguna untuk penciptaan laman web manual

Mata teras Ini dalam JavaScript biasanya merujuk kepada objek yang "memiliki" kaedah, tetapi ia bergantung kepada bagaimana fungsi dipanggil. Apabila tidak ada objek semasa, ini merujuk kepada objek global. Dalam penyemak imbas web, ia diwakili oleh tetingkap. Apabila memanggil fungsi, ini mengekalkan objek global; tetapi apabila memanggil pembina objek atau mana -mana kaedahnya, ini merujuk kepada contoh objek. Anda boleh mengubah konteks ini menggunakan kaedah seperti panggilan (), memohon (), dan mengikat (). Kaedah ini memanggil fungsi menggunakan nilai dan parameter yang diberikan. JavaScript adalah bahasa pengaturcaraan yang sangat baik. Beberapa tahun yang lalu, ayat ini

JQuery adalah rangka kerja JavaScript yang hebat. Walau bagaimanapun, seperti mana -mana perpustakaan, kadang -kadang perlu untuk mendapatkan di bawah tudung untuk mengetahui apa yang sedang berlaku. Mungkin kerana anda mengesan bug atau hanya ingin tahu tentang bagaimana jQuery mencapai UI tertentu

Siaran ini menyusun helaian cheat berguna, panduan rujukan, resipi cepat, dan coretan kod untuk perkembangan aplikasi Android, BlackBerry, dan iPhone. Tiada pemaju harus tanpa mereka! Panduan Rujukan Gesture Touch (PDF) Sumber yang berharga untuk desig


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa
