Rumah >hujung hadapan web >tutorial js >Tindak Balas Pemfaktoran Semula: Menjinakkan Kekacauan, Satu Komponen pada Satu Masa
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.
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.
? Petua Pro: Elakkan pengoptimuman pramatang. Faktorkan semula apabila terdapat keperluan yang jelas, seperti meningkatkan pengalaman pembangun atau menangani pemaparan yang perlahan.
Bau kod ialah isyarat halus ketidakcekapan atau kerumitan. Ia bukan ralat, tetapi ia menunjukkan bahagian yang memerlukan penambahbaikan.
function ProductPage() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); const handleAddToCart = () => { ... }; return ( <div> {data.map(item => <ProductItem key={item.id} item={item} />)} <button onClick={handleAddToCart}>Add to Cart</button> </div> ); }
function ProductPage() { return ( <div> <ProductList /> <CartButton /> </div> ); } function ProductList() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); return data.map(item => <ProductItem key={item.id} item={item} />); } function CartButton() { const handleAddToCart = () => { ... }; return <button onClick={handleAddToCart}>Add to Cart</button>; }
<App> <ProductList product={product} /> </App>
<ProductList> <ProductItem product={product} /> </ProductList>
const ProductContext = React.createContext(); function App() { const [product, setProduct] = useState({ id: 1, name: 'Example Product' }); // Example state return ( <ProductContext.Provider value={product}> <ProductList /> </ProductContext.Provider> ); } function ProductList() { const product = useContext(ProductContext); return <ProductItem product={product} />; }
return condition1 ? a : condition2 ? b : condition3 ? c : d;
function renderContent(condition) { switch (condition) { case 1: return a; case 2: return b; case 3: return c; default: return d; } } return renderContent(condition);
function calculateTotal(cart) { return cart.reduce((total, item) => total + item.price, 0); }
function calculateTotalPrice(cart) { return cart.reduce((total, item) => total + item.price, 0); } function useTotalPrice(cart) { return useMemo(() => calculateTotalPrice(cart), [cart]); }
const [isLoggedIn, setIsLoggedIn] = useState(user !== null);
const isLoggedIn = !!user; // Converts 'user' to boolean
Pengurusan negeri adalah penting tetapi boleh menjadi huru-hara dengan cepat. Begini cara untuk memudahkannya:
const [cartItems, setCartItems] = useState([]); const totalPrice = cartItems.reduce((total, item) => total + item.price, 0);
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);
// Before: function App() { const [filter, setFilter] = useState(''); return <ProductList filter={filter} onFilterChange={setFilter} />; } // After: function ProductList() { const [filter, setFilter] = useState(''); return <FilterInput value={filter} onChange={setFilter} />; }
Komponen harus melakukan satu kerja dan melakukannya dengan baik. Contohnya:
function MemberCard({ member }) { return ( <div> <Summary member={member} /> <SeeMore details={member.details} /> </div> ); }
Gunakan Profiler untuk mengenal pasti kesesakan. Aksesnya dalam Alat Pembangun di bawah "Profiler."
Optimumkan pengiraan mahal:
function ProductPage() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); const handleAddToCart = () => { ... }; return ( <div> {data.map(item => <ProductItem key={item.id} item={item} />)} <button onClick={handleAddToCart}>Add to Cart</button> </div> ); }
Nota: Elakkan menggunakan memoisasi secara berlebihan untuk kebergantungan yang kerap dikemas kini.
Tulis ujian berpusatkan pengguna:
function ProductPage() { return ( <div> <ProductList /> <CartButton /> </div> ); } function ProductList() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); return data.map(item => <ProductItem key={item.id} item={item} />); } function CartButton() { const handleAddToCart = () => { ... }; return <button onClick={handleAddToCart}>Add to Cart</button>; }
<App> <ProductList product={product} /> </App>
<ProductList> <ProductItem product={product} /> </ProductList>
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. |
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!