はじめに
この実験では、React の useMap フックを調べます。このフックは、状態付きの Map オブジェクトとそれを操作する一連の関数を作成します。このフックを使用することで、複雑でエラーが発生しやすいロジックを書くことなく、React コンポーネント内のキーと値のペアを簡単に管理および更新できます。この実験では、useMap フックの実装方法を案内し、サンプル アプリケーションでの使用方法を示します。
React useMap フック
VM には既に
index.htmlとscript.jsが用意されています。一般的には、script.jsとstyle.cssにのみコードを追加する必要があります。
useMap()フックは、状態付きのMapオブジェクトと React フックを使用してそれを操作する一連の関数を作成します。useState()フックは、initialValueでMap状態を初期化します。useMemo()フックは、状態セッターを使用してmap状態変数を操作する一連の不変のアクションを作成し、毎回新しいMapを作成します。useMap()フックは、map状態変数と作成されたactionsを含む配列を返します。MyAppコンポーネントは、useMap()フックを使用して状態付きのMapオブジェクトを初期化し、Mapから項目を追加、リセット、削除するためのボタンを提供します。JSON.stringify()関数は、Mapオブジェクトを読みやすい JSON 文字列にフォーマットします。
const useMap = (initialValue) => {
const [map, setMap] = React.useState(new Map(initialValue));
const actions = React.useMemo(
() => ({
set: (key, value) =>
setMap((prevMap) => {
const nextMap = new Map(prevMap);
nextMap.set(key, value);
return nextMap;
}),
remove: (key) =>
setMap((prevMap) => {
const nextMap = new Map(prevMap);
nextMap.delete(key);
return nextMap;
}),
clear: () => setMap(new Map())
}),
[setMap]
);
return [map, actions];
};
const MyApp = () => {
const [map, { set, remove, clear }] = useMap([["apples", 10]]);
const handleAdd = () => set(Date.now(), new Date().toJSON());
const handleReset = () => clear();
const handleRemove = () => remove("apples");
return (
<div>
<button
<button
<button disabled={!map.has("apples")}>
Remove apples
</button>
<pre>{JSON.stringify(Object.fromEntries(map), null, 2)}</pre>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(<MyApp />);
右下隅の「Go Live」をクリックして、ポート 8080 でウェブ サービスを実行してください。その後、Web 8080 タブを更新してウェブページをプレビューできます。
まとめ
おめでとうございます!あなたは React useMap フックの実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。