カスタム反応フック
9716 ワード
最後の記事では、フックを実装しました.今日は、もっと複雑なものを作ります.
動機
いつものように、このフックを実装する理由を見てみましょう.あなたが電子商取引ウェブサイトを構築していると想像してください.顧客が商品を購入したがっているときはいつでも、彼は彼が望む量を選ぶことができなければなりません.これはユーザインタフェースがどのように見えるか(スタイルを忘れましょう)
とソースコード
上記のコンポーネントは、カスタムを導入することによって簡素化できます
実装
我々
それが言われて、我々の新しいカスタムフックは、現在使用できます!🥳
改善アイデア
さらに進むためには、改善のためのいくつかのアイデアがあります インクリメント/デクリメント・ステップの追加 min/max値の追加 カウンタ値を手動で設定する
結論
これまで、我々が作成してきたカスタムフックは非常に簡単です.次の記事では、我々のコンポーネントコードを簡素化し、コード重複を避けるために、より複雑なフックの実装を開始します.それは、私を読んでくれてありがとう.この記事をお楽しみください.あなたがした場合、私の他のものを見て躊躇しないでください.また、ご質問やご意見がある場合は、いくつかのコメントを書くこと自由に感じる.🤗
ソースコードはCodeSandbox
サポート・ミー
あなたが私を支持したいならば、あなたは以下のリンクでコーヒーを買うことができます.☕)
useCounter
. その名前が示すように、このフックは、私たちがユーティリティ機能(例えば3)のおかげで、カウンター状態を管理するのを助けますincrement
and decrement
. レディ?右にジャンプしましょう!🚀動機
いつものように、このフックを実装する理由を見てみましょう.あなたが電子商取引ウェブサイトを構築していると想像してください.顧客が商品を購入したがっているときはいつでも、彼は彼が望む量を選ぶことができなければなりません.これはユーザインタフェースがどのように見えるか(スタイルを忘れましょう)
とソースコード
Cart
コンポーネントは次のようになります.const Cart = () => {
const [quantity, setQuantity] = useState(0);
return (
<div className="Cart">
<h1>My Cart</h1>
<Item
label="My awesome item"
quantity={quantity}
onIncrement={() => setQuantity((q) => q + 1)}
onDecrement={() => setQuantity((q) => q - 1)}
onReset={() => setQuantity(0)}
/>
</div>
);
}
ℹ️ Of course, all the examples and code snippets will be extremely simplified in order to only focus on what matters the most in this article.
上記のコンポーネントは、カスタムを導入することによって簡素化できます
useCounter
フックfunction Cart() {
const quantity = useCounter(0);
return (
<div className="Cart">
<h1>My Cart</h1>
<Item
label="My awesome item"
quantity={quantity.value}
onIncrement={quantity.increment}
onDecrement={quantity.decrement}
onReset={quantity.reset}
/>
</div>
);
}
面白いね?このフックを実行しましょう!😎実装
我々
useCounter
フックはカウンタ値を保持する状態になります.また、値を更新する方法は3つあります.increment
, decrement
, and reset
. これを念頭に置いて、フックを次のように作成できます.const useCounter = (initialValue) => {
const [value, setValue] = useState(initialValue);
const increment = () => setValue(c => c + 1);
const decrement = () => setValue(c => c - 1);
const reset = () => setValue(initialValue);
return { value, increment, decrement, reset };
};
さて、あなたの中にはなぜ3つのエクスポートされたメソッドがuseCallback
フック(あらゆるレンダリングで新しい機能を作成するのを防ぎます)、より多くの情報here ). 我々のケースでは、コンポーネントはとても単純ですuseCallback
パフォーマンスを改善するために3回は逆の効果を持つ可能性があります.このフックは、あなたの関数がより複雑なコンポーネントで使用されることを知っているときに使用されるべきですonClick
イベント.ℹ️ For more information, don't hesitate to have a look at this article from Dmitri Pavlutin, which goes into details about why, when and how to use the
useCallback
hook. The same applies foruseMemo
anduseRef
(except when used as a reference to an element).
それが言われて、我々の新しいカスタムフックは、現在使用できます!🥳
改善アイデア
さらに進むためには、改善のためのいくつかのアイデアがあります
useCounter
フック.あなたが自分で練習することができるように、このアイデアの1つ以上を実装しようとすることを躊躇しないでください.counter.increment(step)
) useCounter({ min: 0, max: 10, initial: 0})
) counter.set(value)
) 結論
これまで、我々が作成してきたカスタムフックは非常に簡単です.次の記事では、我々のコンポーネントコードを簡素化し、コード重複を避けるために、より複雑なフックの実装を開始します.それは、私を読んでくれてありがとう.この記事をお楽しみください.あなたがした場合、私の他のものを見て躊躇しないでください.また、ご質問やご意見がある場合は、いくつかのコメントを書くこと自由に感じる.🤗
ソースコードはCodeSandbox
サポート・ミー
あなたが私を支持したいならば、あなたは以下のリンクでコーヒーを買うことができます.☕)
Reference
この問題について(カスタム反応フック), 我々は、より多くの情報をここで見つけました https://dev.to/iamludal/custom-react-hooks-usecounter-5a73テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol