React の世界にしばらく関わったことがある人なら、おそらく「それは単なる JavaScript です」というフレーズを聞いたことがあるでしょう。それは事実ですが、React アプリをより保守しやすく、再利用しやすく、実に快適に操作できるようにするために、実証済みのパターンの恩恵を受けられないというわけではありません。 React コンポーネントを「まあまあ」から「素晴らしい」レベルに引き上げる重要な設計パターンをいくつか見てみましょう!
本題に入る前に、部屋の中の象について話しましょう。そもそも、なぜデザイン パターンにこだわる必要があるのでしょうか。 React 愛好家の皆さん、デザイン パターンはコーディングの世界の秘密のレシピのようなものです。これらは、次のような一般的な問題に対する、実証済みのソリューションです。
同じページに到達したので、React コンポーネントをワックスをかけたてのスポーツカーよりも明るく輝かせるいくつかのパターンを探ってみましょう!
React のコンポーネント モデルは、それ自体がすでに強力なパターンですが、さらに一歩進めて構成することで、より柔軟で再利用可能なコードを作成できます。
// Instead of this: const Button = ({ label, icon, onClick }) => ( ); // Consider this: const Button = ({ children, onClick }) => ( ); const IconButton = ({ icon, label }) => ( );
なぜ素晴らしいのか:
プロのヒント: コンポーネントをレゴ ブロックとして考えてください。モジュール式で構成可能であればあるほど、より素晴らしい構造を構築できるようになります!
このパターンは、コンポーネントのロジックをプレゼンテーションから分離し、推論とテストを容易にします。
// Container Component const UserListContainer = () => { const [users, setUsers] = useState([]); useEffect(() => { fetchUsers().then(setUsers); }, []); return; }; // Presentational Component const UserList = ({ users }) => (
なぜ素晴らしいのか:
覚えておいてください: コンテナは演劇の舞台裏スタッフのようなもので、すべての舞台裏の作業を処理します。一方、プレゼンテーション コンポーネントは俳優であり、観客に見栄えを良くすることだけに重点を置いています。
HOC は、コンポーネントを受け取り、いくつかの機能が追加された新しいコンポーネントを返す関数です。コンポーネントのパワーアップのようなものです!
const withLoader = (WrappedComponent) => { return ({ isLoading, ...props }) => { if (isLoading) { return; } return ; }; }; const EnhancedUserList = withLoader(UserList);
なぜクールなのか:
注意: HOC は強力ですが、使いすぎると「ラッパー地獄」に陥る可能性があります。賢く使ってください!
このパターンには、関数をプロップとしてコンポーネントに渡すことが含まれており、レンダリングされる内容をより詳細に制御できるようになります。
const MouseTracker = ({ render }) => { const [position, setPosition] = useState({ x: 0, y: 0 }); const handleMouseMove = (event) => { setPosition({ x: event.clientX, y: event.clientY }); }; return ({render(position)}); }; // Usage( The mouse is at ({x}, {y})
)} />
それが気の利いた理由:
面白い事実: レンダー プロップ パターンは非常に柔軟で、これまで説明してきた他のほとんどのパターンも実装できます。
フックは React の新しい要素であり、カスタム フックを使用すると、コンポーネント ロジックを再利用可能な関数に抽出できます。
const useWindowSize = () => { const [size, setSize] = useState({ width: 0, height: 0 }); useEffect(() => { const handleResize = () => { setSize({ width: window.innerWidth, height: window.innerHeight }); }; window.addEventListener('resize', handleResize); handleResize(); // Set initial size return () => window.removeEventListener('resize', handleResize); }, []); return size; }; // Usage const MyComponent = () => { const { width, height } = useWindowSize(); returnWindow size: {width} x {height}; };
なぜ素晴らしいのか:
プロのヒント: 複数のコンポーネントで同様のロジックを繰り返していることに気付いた場合は、それをカスタム フックに抽出する時期が来ている可能性があります!
React のデザイン パターンは、ガジェットが詰まったユーティリティ ベルトを持っているようなものです。アプリがどのような課題に直面しても、仕事に適したツールを提供します。覚えて:
これらのパターンを React ツールキットに組み込むことで、より保守しやすく、再利用可能で、洗練されたコンポーネントを作成できるようになります。将来のあなた (そしてあなたのチームメイト) が、あなたのよく構造化されたコードベースをスムーズに読み進められたら、あなたに感謝するでしょう!
コーディングを楽しんでください!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3