ホームページ >ウェブフロントエンド >jsチュートリアル >React のリファクタリング: 一度に 1 つのコンポーネントを使用して混沌を制御する
React コードをリファクタリングすることは、混沌としたキッチンを整理整頓された料理天国に変えるようなものです。アプリの機能を変更せずに、アプリの構造、保守性、パフォーマンスを向上させることが重要です。肥大化したコンポーネントや複雑な状態ロジックと戦っている場合でも、綿密に計画されたリファクタリングにより、コードベースが洗練された効率的なマシンに変換されます。
このブログでは、一般的なリファクタリング シナリオを明らかにし、実用的なソリューションを提供し、React アプリの真の可能性を引き出すための手段を提供します。
リファクタリングは、コードの機能を変更せずにコードの構造を改善します。それはバグを修正したり機能を追加したりすることではなく、コードを人間とマシンの両方にとってより良いものにすることです。
? プロのヒント: 時期尚早な最適化は避けてください。開発者エクスペリエンスの向上やレンダリングの遅さへの対処など、明確なニーズがある場合はリファクタリングを行ってください。
コードの匂いは、非効率または複雑さの微妙なシグナルです。これらはエラーではありませんが、改善が必要な領域を示しています。
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
状態管理は不可欠ですが、すぐに混乱してしまう可能性があります。簡略化する方法は次のとおりです:
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} />; }
コンポーネントは 1 つのジョブを適切に実行する必要があります。例:
function MemberCard({ member }) { return ( <div> <Summary member={member} /> <SeeMore details={member.details} /> </div> ); }
プロファイラーを使用してボトルネックを特定します。開発者ツールの「プロファイラー」でアクセスします。
コストのかかる計算を最適化します:
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>
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. |
以上がReact のリファクタリング: 一度に 1 つのコンポーネントを使用して混沌を制御するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。