{"id":38247,"date":"2023-10-06T14:21:17","date_gmt":"2023-07-26T22:35:23","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/"},"modified":"2024-05-04T03:05:59","modified_gmt":"2024-05-03T19:05:59","slug":"react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/","title":{"rendered":"React hooks &#038; Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u6211\u4f1a\u516c\u5f00\u516c\u53f8\u5185\u90e8\u4e3e\u529e\u7684React Recoil\u5b66\u4e60\u7814\u8ba8\u4f1a\u7684\u5185\u5bb9\u3002<\/p>\n<p>\u5982\u679c\u6211\u9519\u4e86\uff0c\u8bf7\u5411\u6211\u6254\u77f3\u5934\uff01<\/p>\n<p>&nbsp;<\/p>\n<h1>React hooks\u662f\u4ec0\u4e48\uff1f<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">React Hooks\u306f\u3001React16.8.0\u4ee5\u964d\u3067\u5229\u7528\u53ef\u80fd\u306a\u95a2\u6570\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306eAPI<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u9593\u306e\u30ed\u30b8\u30c3\u30af\u3092\u518d\u5229\u7528\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">UI\u3068\u30ed\u30b8\u30c3\u30af\u3092\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u4e3b\u6d41\u3068\u306a\u3063\u305f \u95a2\u6570\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 + hooks \u304c\u5bfe\u8c61<\/ul>\n<p>\u94a9\u5b50 API \u53c2\u8003\u6587\u6863<\/p>\n<h1>\u76ee\u5f55<\/h1>\n<p>useState \u57fa\u672c\u30d5\u30c3\u30af \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u9589\u3058\u305f\u72b6\u614b(local state)\u3092\u5b9a\u7fa9<\/p>\n<p>useReducer useState\u306e\u4ee3\u66ff\u3002\u5024\u3092\u30bb\u30c3\u30c8\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u5024\u3092\u3069\u3046\u3044\u3046\u64cd\u4f5c\u3092\u3059\u308b\u304b\u3092\u5b9a\u7fa9<\/p>\n<p>useEffect \u57fa\u672c\u30d5\u30c3\u30af \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u3092\u5b9a\u7fa9<\/p>\n<p>memo \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u30e1\u30e2\u5316(\u30ad\u30e3\u30c3\u30b7\u30e5)\u3057\u3001\u4e0d\u8981\u306a\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u6291\u5236<\/p>\n<p>useMemo \u95a2\u6570\u306e\u623b\u308a\u5024\u3092\u30e1\u30e2\u5316(\u30ad\u30e3\u30c3\u30b7\u30e5)\u3057\u3001\u4e0d\u8981\u306a\u518d\u5b9f\u884c\u3092\u6291\u5236<\/p>\n<p>useCallback \u95a2\u6570\u3092\u30e1\u30e2\u5316(\u30ad\u30e3\u30c3\u30b7\u30e5)\u3057\u3001\u30e1\u30e2\u5316\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4e0d\u8981\u306a\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u6291\u5236<\/p>\n<p>custom hook local state\u306e\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5206\u96e2\u3057\u3001\u30c6\u30b9\u30c8\u53ef\u80fd\u306b\u3057\u305f\u4f8b<\/p>\n<p>context React\u306econtext api\u3092\u5229\u7528\u3057\u305fglobal state\u306e\u5b9a\u7fa9<\/p>\n<p>context optimize React\u306econtext api\u3092\u5229\u7528\u3057\u305fglobal state\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6700\u9069\u5316\u3057\u305f\u4f8b<\/p>\n<p>recoil \u72b6\u614b\u7ba1\u7406\u30e9\u30a4\u30d6\u30e9\u30earecoil\u3092\u5229\u7528\u3057\u305fglobal state\u306e\u5229\u7528\u4f8b<\/p>\n<p>recoil optimize \u72b6\u614b\u7ba1\u7406\u30e9\u30a4\u30d6\u30e9\u30earecoil\u3092\u5229\u7528\u3057\u305fglobal state\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6700\u9069\u5316\u3057\u305f\u4f8b<\/p>\n<p>recoil custom hook global state\u306e\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5206\u96e2\u3057\u3001\u30c6\u30b9\u30c8\u53ef\u80fd\u306b\u3057\u305f\u4f8b<\/p>\n<p>recoil selector recoil selector\u3092\u5229\u7528\u3057\u305f\u8a08\u7b97\u5024\u306e\u53d6\u5f97\u3068\u4e0d\u8981\u306a\u518d\u5b9f\u884c\u306e\u6291\u5236<\/p>\n<h1>\u6839\u636e\u76ee\u7684\u5236\u5b9a\u7684\u7d22\u5f15<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u57fa\u672chook\u306b\u3064\u3044\u3066<\/ul>\n<\/li>\n<\/ul>\n<p>useState<br \/>\nuseEffect<br \/>\ncontext<\/p>\n<p>\u72b6\u614b\u7ba1\u7406\u306b\u3064\u3044\u3066<\/p>\n<p>useState<br \/>\ncontext<br \/>\nrecoil<\/p>\n<p>\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6700\u9069\u5316\u306b\u3064\u3044\u3066<\/p>\n<p>memo<br \/>\nuseMemo<br \/>\nuseCallback<br \/>\ncontext optimize<br \/>\nrecoil optimize<br \/>\nrecoil selector<\/p>\n<p>\u30ed\u30b8\u30c3\u30af\u5206\u96e2\u3068\u30c6\u30b9\u30c8<\/p>\n<p>useReducer<br \/>\ncustom hook<br \/>\nrecoil custom hook<\/p>\n<h1>\u4f7f\u7528\u72b6\u6001<\/h1>\n<p>\u5b9a\u4e49\u4e00\u4e2a\u5728\u57fa\u672c\u6302\u94a9\u7ec4\u4ef6\u4e2d\u5c01\u95ed\u72b6\u6001\uff08\u672c\u5730\u72b6\u6001\uff09\u3002<\/p>\n<p>\/src\/components\/UseState.tsx\u7684\u4e2d\u6587\u91ca\u4e49\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">UseStateComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">UseStateComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">UseStateComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u539f\u6587\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import UseState from '.\/components\/UseState';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/use-state\" element={&lt;UseState \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useState\u306b\u3088\u308a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u72b6\u614b\u304c\u4f5c\u3089\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u623b\u308a\u5024\u306e\u5024\u3068\u305d\u306e\u30bb\u30c3\u30bf\u30fc\u3092\u5229\u7528\u3057\u3066\u8868\u793a\u3084\u72b6\u614b\u306e\u5909\u66f4\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u72b6\u614b\u306e\u5909\u66f4\u3092\u691c\u77e5\u3057\u3066\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<\/ul>\n<h1>\u4f7f\u7528useReducer<\/h1>\n<p>useState\u7684\u66ff\u4ee3\u54c1\u3002\u4e0d\u8a2d\u7f6e\u503c\uff0c\u800c\u662f\u5b9a\u7fa9\u5c0d\u503c\u9032\u884c\u4ec0\u9ebc\u64cd\u4f5c\u3002<\/p>\n<p>\/src\/components\/UseReducer.tsx \u7684\u4e2d\u6587\u91ca\u4e49\u662f\u4ec0\u4e48\uff1f<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">reducer<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">count<\/span><span class=\"p\">:<\/span> <span class=\"nx\">number<\/span><span class=\"p\">,<\/span> <span class=\"nx\">action<\/span><span class=\"p\">:<\/span> <span class=\"nx\">string<\/span><span class=\"p\">)<\/span><span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">switch <\/span><span class=\"p\">(<\/span><span class=\"nx\">action<\/span><span class=\"p\">){<\/span>\r\n    <span class=\"k\">case<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">increment<\/span><span class=\"dl\">'<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span>\r\n    <span class=\"k\">case<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">reset<\/span><span class=\"dl\">'<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"mi\">0<\/span>\r\n    <span class=\"na\">default<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"nx\">count<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">UseReducerComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">dispatch<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useReducer<\/span><span class=\"p\">(<\/span><span class=\"nx\">reducer<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">dispatch<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">reset<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">dispatch<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">increment<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">UseReducerComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u4e2d\u6587\u672c\u5730\u5316\u6539\u5199\u5982\u4e0b\uff1a<\/p>\n<p>\/src\/App.tsx<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import UseReducer from '.\/components\/UseReducer';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/use-reducer\" element={&lt;UseReducer \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useReducer\u306b\u3088\u308a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u72b6\u614b\u304c\u4f5c\u3089\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u623b\u308a\u5024\u306e\u5024\u3068\u305d\u306e\u5909\u66f4\u95a2\u6570\u3092\u5229\u7528\u3057\u3066\u8868\u793a\u3084\u72b6\u614b\u306e\u5909\u66f4\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useState\u3068\u306f\u9055\u3044 \u5024\u3092\u30bb\u30c3\u30c8\u3059\u308b \u306e\u3067\u306f\u306a\u304f \u5024\u306b\u3069\u3046\u3044\u3046\u64cd\u4f5c\u3092\u3059\u308b \u304b\u3092\u5b9a\u7fa9\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">reducer\u304c\u7d14\u7c8b\u306a\u95a2\u6570\u306a\u306e\u3067\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5265\u304c\u3057\u3084\u3059\u304f\u30c6\u30b9\u30c8\u3057\u3084\u3059\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u305f\u3060\u3057\u3001useState\u3092\u4f7f\u3063\u305fcustom hook\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u540c\u69d8\u306e\u30e1\u30ea\u30c3\u30c8\u306f\u5f97\u3089\u308c\u308b<\/ul>\n<h1>\u4f7f\u7528useEffect<\/h1>\n<p>\u5b9a\u4e49\u57fa\u672c\u94a9\u5b50\u7ec4\u4ef6\u7684\u751f\u547d\u5468\u671f<\/p>\n<p>\/src\/components\/UseEffect.tsx\u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useNavigate<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-router-dom<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">UseEffectComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">navigate<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useNavigate<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">UseEffectComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">UseEffectComponent mount<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"k\">return <\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">UseEffectComponent unmount<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">});<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\r\n\r\n  <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">UseEffectComponent change count<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">]);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">navigate<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/use-state<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>go \/use-state<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">UseEffectComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u8de8\u8bed\u8a00\u91cd\u6784\u4e2d<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import UseEffect from '.\/components\/UseEffect';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/use-effect\" element={&lt;UseEffect \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useEffect\u306b\u3088\u308a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u3092\u5b9a\u7fa9\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">mount\u3055\u308c\u305f\u6642\u3001API\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u30c7\u30fc\u30bf\u3092\u53d6\u3063\u3066\u304f\u308b\u306a\u3069\u306e\u524d\u51e6\u7406<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">unmount\u3055\u308c\u305f\u6642\u3001websocket\u306e\u63a5\u7d9a\u3092\u5207\u308b\u306a\u3069\u306e\u5f8c\u51e6\u7406<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u7b2c\u4e8c\u5f15\u6570\u306b\u6307\u5b9a\u3055\u308c\u305f\u5024(\u72b6\u614b\u3067\u3082props\u3067\u3082)\u304c\u5909\u66f4\u3055\u308c\u305f\u6642\u3001\u30c7\u30fc\u30bf\u3092\u518d\u5ea6\u53d6\u3063\u3066\u304f\u308b\u306a\u3069\u306e\u5909\u66f4\u51e6\u7406<\/ul>\n<h1>\u5907\u5fd8\u5f55<\/h1>\n<p>\u5bf9\u7ec4\u4ef6\u8fdb\u884c\u8bb0\u5fc6\u5316(\u7f13\u5b58)\uff0c\u6291\u5236\u4e0d\u5fc5\u8981\u7684\u6e32\u67d3\u3002<\/p>\n<p>\/src\/components\/Memo.tsx\u7684\u4e2d\u6587\u610f\u601d\u662f\u4ec0\u4e48\uff1f<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kr\">interface<\/span> <span class=\"nx\">CountComponentProps<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">count<\/span><span class=\"p\">:<\/span> <span class=\"nx\">number<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">CountComponentProps<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">({<\/span> <span class=\"nx\">count<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">MemorizeCountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">CountComponentProps<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">memo<\/span><span class=\"p\">(({<\/span> <span class=\"nx\">count<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">MemorizeCountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">MemoComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count2<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">MemoComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountComponent<\/span> <span class=\"na\">count<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">count1<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount1<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount1<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">MemorizeCountComponent<\/span> <span class=\"na\">count<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">count2<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount2<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount2<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">MemoComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1\u4e3a\uff1a\u7cbe\u7b80\u7248\u672c\u4e3a \/src\/\u5e94\u7528.tsx\u3002<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import Memo from '.\/components\/Memo';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/memo\" element={&lt;Memo \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">memo\u306b\u3088\u308a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u30e1\u30e2\u5316(\u30ad\u30e3\u30c3\u30b7\u30e5)\u3057\u3001\u4e0d\u8981\u306a\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u6291\u5236\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30e1\u30e2\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u89aa\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6642\u3001\u6e21\u3055\u308c\u305f\u5024\u306e\u5909\u5316\u306b\u304b\u304b\u308f\u3089\u305a\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30e1\u30e2\u5316\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u6e21\u3055\u308c\u305f\u5024\u304c\u5909\u5316\u3057\u306a\u3044\u9650\u308a\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u306a\u3044<\/ul>\n<h1>\u4f7f\u7528useMemo<\/h1>\n<p>\u5c06\u51fd\u6570\u7684\u8fd4\u56de\u503c\u8fdb\u884c\u8bb0\u5fc6\u5316(\u7f13\u5b58)\uff0c\u4ee5\u6291\u5236\u4e0d\u5fc5\u8981\u7684\u91cd\u65b0\u6267\u884c\u3002<\/p>\n<p>\/src\/components\/UseMemo.tsx \u7684\u5185\u5bb9\u53ef\u4ee5\u7528\u6c49\u8bed\u8868\u8fbe\u4e3a\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">UseMemoComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count2<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">double<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"na\">value<\/span><span class=\"p\">:<\/span> <span class=\"nx\">number<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n\r\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">calculate double<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"k\">return<\/span> <span class=\"nx\">value<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">doubleCount1<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useMemo<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">double<\/span><span class=\"p\">(<\/span><span class=\"nx\">count1<\/span><span class=\"p\">),<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count1<\/span><span class=\"p\">]);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">doubleCount2<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">double<\/span><span class=\"p\">(<\/span><span class=\"nx\">count2<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">doubleCount1<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount1<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount1<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">doubleCount2<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount2<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount2<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">UseMemoComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx\u7684\u4e2d\u6587\u672c\u5730\u5316\uff1a<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import UseMemo from '.\/components\/UseMemo';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/use-memo\" element={&lt;UseMemo \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useMemo\u306b\u3088\u308a\u95a2\u6570\u306e\u623b\u308a\u5024\u3092\u30e1\u30e2\u5316(\u30ad\u30e3\u30c3\u30b7\u30e5)\u3057\u3001\u4e0d\u8981\u306a\u518d\u5b9f\u884c\u3092\u6291\u5236\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30e1\u30e2\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u95a2\u6570\u306e\u623b\u308a\u5024\u306f\u89aa\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6642\u3001\u5229\u7528\u3057\u3066\u3044\u308b\u5024\u306e\u5909\u5316\u306b\u304b\u304b\u308f\u3089\u305a\u518d\u5b9f\u884c\u3055\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30e1\u30e2\u5316\u3055\u308c\u305f\u95a2\u6570\u306e\u623b\u308a\u5024\u306f\u3001\u5229\u7528\u3057\u3066\u3044\u308b\u5024\u304c\u5909\u5316\u3057\u306a\u3044\u9650\u308a\u518d\u5b9f\u884c\u3055\u308c\u306a\u3044<\/ul>\n<h1>\u4f7f\u7528useCallback<\/h1>\n<p>\u5bf9\u51fd\u6570\u8fdb\u884c\u8bb0\u5fc6\u5316\uff08\u7f13\u5b58\uff09\uff0c\u4ee5\u6291\u5236\u8bb0\u5fc6\u5316\u7ec4\u4ef6\u7684\u4e0d\u5fc5\u8981\u6e32\u67d3\u3002<\/p>\n<p>\/src\/components\/UseCallback.tsx \u7684\u90e8\u5206\u7d44\u4ef6<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kr\">interface<\/span> <span class=\"nx\">LogButtonComponentProps<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">onClick<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"k\">void<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">LogButtonComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">LogButtonComponentProps<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">({<\/span> <span class=\"nx\">onClick<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">LogButtonComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">onClick<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>log<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">MemorizeLogButtonComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">LogButtonComponentProps<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">memo<\/span><span class=\"p\">(({<\/span> <span class=\"nx\">onClick<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">MemorizeLogButtonComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">onClick<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>memorize log<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">UseCallbackComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count2<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">handleClick<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useCallback<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">`count: <\/span><span class=\"p\">${<\/span><span class=\"nx\">count1<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count1<\/span><span class=\"p\">]);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count1<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount1<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">LogButtonComponent<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">handleClick<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">MemorizeLogButtonComponent<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">handleClick<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;<\/span>\r\n\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count2<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount2<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">UseCallbackComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u4e2d\u6587\u7ffb\u8bd1\u53ef\u4ee5\u662f\uff1a<br \/>\n\/src\/App.tsx\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import UseCallback from '.\/components\/UseCallback';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/use-callback\" element={&lt;UseCallback \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useCallback\u306b\u3088\u308a\u95a2\u6570\u3092\u30e1\u30e2\u5316(\u30ad\u30e3\u30c3\u30b7\u30e5)\u3057\u3001\u30e1\u30e2\u5316\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4e0d\u8981\u306a\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u6291\u5236\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u57fa\u672c\u7684\u306b\u95a2\u6570\u306f\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6642\u306b\u518d\u4f5c\u6210\u3055\u308c\u3001\u4ee5\u524d\u306e\u95a2\u6570\u3068\u9055\u3046\u95a2\u6570(\u7b49\u4fa1\u3067\u306f\u306a\u3044)\u3092\u6e21\u3059\u3053\u3068\u306b\u306a\u308b\u306e\u3067\u3001\u30e1\u30e2\u5316\u3055\u308c\u3066\u3044\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u6e21\u3057\u3066\u3044\u308b\u304b\u306b\u95a2\u308f\u3089\u305a\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">useCallback\u3092\u901a\u3059\u3053\u3068\u306b\u3088\u308a\u3001\u524d\u56de\u3068\u540c\u3058(\u7b49\u4fa1\u306a)\u95a2\u6570\u3092\u4f5c\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u305f\u3060\u3057\u3001useCallback\u3067\u4f5c\u6210\u3057\u305f\u95a2\u6570\u3067\u3082\u30e1\u30e2\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u6e21\u3059\u5834\u5408\u306f\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">useCallback\u3067\u4f5c\u6210\u3057\u305f\u95a2\u6570\u3092\u30e1\u30e2\u5316\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u6e21\u3059\u3053\u3068\u3067\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u6291\u5236\u3067\u304d\u308b<\/ul>\n<h1>\u81ea\u5b9a\u4e49\u6302\u94a9<\/h1>\n<p>\u5c06\u672c\u5730\u72b6\u6001\u7684\u903b\u8f91\u4e0e\u7ec4\u4ef6\u5206\u79bb\uff0c\u4f7f\u5176\u53ef\u8fdb\u884c\u6d4b\u8bd5\u7684\u793a\u4f8b\u3002<\/p>\n<p>\/src\/components\/CustomHookStore.tsx \u7684\u4e2d\u6587\u7ffb\u8bd1\u5982\u4e0b\uff1a<br \/>\n\/custom\/hooks\/CustomHookStore.tsx<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useCounter<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">initialCount<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"nx\">initialCount<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">increment<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">setCount<\/span><span class=\"p\">((<\/span><span class=\"nx\">count<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">reset<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">increment<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reset<\/span> <span class=\"p\">};<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\/src\/components\/CustomHook.tsx<br \/>\n\u81ea\u5b9a\u4e49\u94a9\u5b50.tsx<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useCounter<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/CustomHookStore<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CustomHookComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">increment<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reset<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">increment<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">reset<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">CustomHookComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u4e2d\u6587\u7ffb\u8bd1\u5982\u4e0b\uff1a<\/p>\n<p>\/src\/App.tsx<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"gi\">+ import CustomHook from '.\/components\/CustomHook';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;BrowserRouter&gt;\r\n    &lt;Routes&gt;\r\n      ...\r\n<span class=\"gi\">+     &lt;Route path=\"\/custom-hook\" element={&lt;CustomHook \/&gt;} \/&gt;\r\n<\/span>      ...\r\n    &lt;\/Routes&gt;\r\n  &lt;\/BrowserRouter&gt;\r\n);\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30ab\u30b9\u30bf\u30e0\u30d5\u30c3\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5206\u96e2\u3067\u304d\u308b<\/ul>\n<h2>\u8003\u8bd5 sh\u00ec)<\/h2>\n<p>\/src\/components\/CustomHook.test.tsx \u7684\u4e2d\u6587\u7ffb\u8bd1\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cleanup<\/span><span class=\"p\">,<\/span> <span class=\"nx\">render<\/span><span class=\"p\">,<\/span> <span class=\"nx\">screen<\/span><span class=\"p\">,<\/span> <span class=\"nx\">fireEvent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@testing-library\/react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">CustomHook<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/CustomHook<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"o\">*<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">CustomHookStoreModule<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/CustomHookStore<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nf\">afterEach<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">cleanup<\/span><span class=\"p\">());<\/span>\r\n\r\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CustomHook<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CustomHook\u304c\u8868\u793a\u3055\u308c\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">asFragment<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CustomHook<\/span> <span class=\"p\">\/&gt;,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nf\">asFragment<\/span><span class=\"p\">()).<\/span><span class=\"nf\">toMatchSnapshot<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">+\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u308b\u3068increment\u304c\u547c\u3070\u308c\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">mockIncrement<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">fn<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">spyOn<\/span><span class=\"p\">(<\/span><span class=\"nx\">CustomHookStoreModule<\/span><span class=\"p\">,<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">useCounter<\/span><span class=\"dl\">'<\/span><span class=\"p\">).<\/span><span class=\"nf\">mockReturnValueOnce<\/span><span class=\"p\">({<\/span>\r\n      <span class=\"na\">count<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"na\">increment<\/span><span class=\"p\">:<\/span> <span class=\"nx\">mockIncrement<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"na\">reset<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{},<\/span>\r\n    <span class=\"p\">});<\/span>\r\n\r\n    <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CustomHook<\/span> <span class=\"p\">\/&gt;,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">button<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">screen<\/span><span class=\"p\">.<\/span><span class=\"nf\">getByRole<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">button<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">+<\/span><span class=\"dl\">'<\/span> <span class=\"p\">});<\/span>\r\n    <span class=\"nx\">fireEvent<\/span><span class=\"p\">.<\/span><span class=\"nf\">click<\/span><span class=\"p\">(<\/span><span class=\"nx\">button<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">mockIncrement<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBeCalled<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Reset\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u308b\u3068reset\u304c\u547c\u3070\u308c\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">mockReset<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">fn<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">spyOn<\/span><span class=\"p\">(<\/span><span class=\"nx\">CustomHookStoreModule<\/span><span class=\"p\">,<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">useCounter<\/span><span class=\"dl\">'<\/span><span class=\"p\">).<\/span><span class=\"nf\">mockReturnValueOnce<\/span><span class=\"p\">({<\/span>\r\n      <span class=\"na\">count<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"na\">increment<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{},<\/span>\r\n      <span class=\"na\">reset<\/span><span class=\"p\">:<\/span> <span class=\"nx\">mockReset<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">});<\/span>\r\n\r\n    <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CustomHook<\/span> <span class=\"p\">\/&gt;,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">button<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">screen<\/span><span class=\"p\">.<\/span><span class=\"nf\">getByRole<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">button<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Reset<\/span><span class=\"dl\">'<\/span> <span class=\"p\">});<\/span>\r\n    <span class=\"nx\">fireEvent<\/span><span class=\"p\">.<\/span><span class=\"nf\">click<\/span><span class=\"p\">(<\/span><span class=\"nx\">button<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">mockReset<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBeCalled<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">});<\/span>\r\n<span class=\"p\">});<\/span>\r\n<\/code><\/pre>\n<p>\/src\/components\/CustomHookStore.test.tsx\u7684\u4e2d\u6587\u7ffb\u8bd1\u5982\u4e0b\uff1a<br \/>\n\u81ea\u5b9a\u4e49\u94a9\u5b50\u5b58\u50a8\u6d4b\u8bd5.tsx<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">renderHook<\/span><span class=\"p\">,<\/span> <span class=\"nx\">act<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@testing-library\/react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useCounter<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/CustomHookStore<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">useCounter<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">count<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\u73fe\u5728\u306ecount\u5024\u3092\u8fd4\u3059<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">renderHook<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">));<\/span>\r\n      <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">});<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">increment<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">count\u3092 +1 \u3059\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">renderHook<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">));<\/span>\r\n      <span class=\"nf\">act<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">increment<\/span><span class=\"p\">()<\/span> <span class=\"p\">});<\/span>\r\n      <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">});<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">reset<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">count\u3092 0 \u306b\u3059\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">renderHook<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">));<\/span>\r\n      <span class=\"nf\">act<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">reset<\/span><span class=\"p\">()<\/span> <span class=\"p\">});<\/span>\r\n      <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">});<\/span>\r\n  <span class=\"p\">});<\/span>\r\n<span class=\"p\">});<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5206\u96e2\u3057\u305f\u306e\u3067\u898b\u901a\u3057\u304c\u826f\u304f\u3001\u305d\u308c\u305e\u308c\u306e\u5f79\u5272\u306b\u3064\u3044\u3066\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30c6\u30b9\u30c8\u306b\u3088\u308b\u898b\u305f\u76ee\u306e\u5909\u5316\u3068\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u52d5\u4f5c(xxx\u3092\u547c\u3073\u51fa\u3059\u306a\u3069)\u306e\u307f\u30c6\u30b9\u30c8\u3002\u30ed\u30b8\u30c3\u30af\u306b\u3064\u3044\u3066\u306f\u30c6\u30b9\u30c8\u3057\u306a\u304f\u3066\u3044\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30ed\u30b8\u30c3\u30af(\u30ab\u30b9\u30bf\u30e0\u30d5\u30c3\u30af)\u306f\u305d\u306e\u51e6\u7406\u5358\u4f53\u3092\u30c6\u30b9\u30c8<\/ul>\n<h1>There was a heated argument between two friends. One of them accused the other of betraying their trust, while the other defended their actions and claimed it was all a misunderstanding. The situation became tenser as both friends refused to back down and their voices grew louder. Their friendship seemed to be hanging by a thread, as neither side was willing to compromise or find a solution.<\/h1>\n<p>\u4f7f\u7528React\u7684context API\u6765\u5b9a\u4e49\u5168\u5c40\u72b6\u6001<\/p>\n<p>\/src\/Context.tsx\u7684\u6539\u5199\u7248<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kr\">interface<\/span> <span class=\"nx\">CountState<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">count<\/span><span class=\"p\">:<\/span> <span class=\"nx\">number<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">setCount<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">Dispatch<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">SetStateAction<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;&gt;<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountContext<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">createContext<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">CountState<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">count<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">setCount<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"kc\">undefined<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kr\">interface<\/span> <span class=\"nx\">CountProviderProps<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">children<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">ReactNode<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">CountProvider<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">CountProviderProps<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">({<\/span> <span class=\"nx\">children<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">CountContext<\/span><span class=\"p\">.<\/span><span class=\"nc\">Provider<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span> <span class=\"p\">}<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"si\">{<\/span><span class=\"nx\">children<\/span><span class=\"si\">}<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">CountContext<\/span><span class=\"p\">.<\/span><span class=\"nc\">Provider<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useCountValue<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useContext<\/span><span class=\"p\">(<\/span><span class=\"nx\">CountContext<\/span><span class=\"p\">).<\/span><span class=\"nx\">count<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useCountSetValue<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useContext<\/span><span class=\"p\">(<\/span><span class=\"nx\">CountContext<\/span><span class=\"p\">).<\/span><span class=\"nx\">setCount<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/components\/Context.tsx\u53ef\u4ee5\u7528\u4ee5\u4e0b\u65b9\u5f0f\u8fdb\u884c\u4e2d\u6587\u7ffb\u8bd1\uff1a<br \/>\n\/src\/components\/\u4e0a\u4e0b\u6587.tsx<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useNavigate<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-router-dom<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useCountValue<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useCountSetValue<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">..\/Context<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCountValue<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountResetComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCountSetValue<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ResetComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUpComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCountSetValue<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountUpComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">ContextComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">navigate<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useNavigate<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ContextComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountResetComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUpComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">navigate<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/use-state<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>go \/use-state<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">ContextComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx\u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ import { CountProvider } from '.\/Context';\r\n+ import Context from '.\/components\/Context';\r\n<\/span>\r\n<span class=\"gi\">+ interface ProvidersProps {\r\n+   children: React.ReactNode;\r\n+ }\r\n<\/span>\r\n<span class=\"gi\">+ export const Providers: React.FC&lt;ProvidersProps&gt; = ({ children }) =&gt; {\r\n+   return (\r\n+     &lt;CountProvider&gt;\r\n+       {children}\r\n+     &lt;\/CountProvider&gt;\r\n+   );\r\n+ };\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span><span class=\"gd\">- &lt;BrowserRouter&gt;\r\n-   &lt;Routes&gt;\r\n-     ...\r\n-   &lt;\/Routes&gt;\r\n- &lt;\/BrowserRouter&gt;\r\n<\/span><span class=\"gi\">+ &lt;Providers&gt;\r\n+   &lt;BrowserRouter&gt;\r\n+     &lt;Routes&gt;\r\n+       ...\r\n+       &lt;Route path=\"\/context\" element={&lt;Context \/&gt;} \/&gt;\r\n+       ...\r\n+     &lt;\/Routes&gt;\r\n+   &lt;\/BrowserRouter&gt;\r\n+ &lt;\/Providers&gt;\r\n<\/span>);\r\n\r\n<span class=\"p\">export default App;\r\n<\/span><\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5168\u30b9\u30b3\u30fc\u30d7\u3067\u5229\u7528\u53ef\u80fd\u306a\u72b6\u614b\u3092\u4f5c\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u30ed\u30b0\u30a4\u30f3\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u306a\u3069\u591a\u6570\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">local state\u3068grobal state\u306b\u3064\u3044\u3066<\/ul>\n<\/li>\n<\/ul>\n<p>useState\u3067\u4f5c\u3063\u3066\u3044\u305f\u72b6\u614b\u306flocal state<\/p>\n<p>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u9589\u3058\u305f\u72b6\u614b\u3067\u3001unmount\u3055\u308c\u308b\u3068\u6d88\u3048\u308b<\/p>\n<p>context\u3067\u4f5c\u308b\u72b6\u614b\u306fgrobal state<\/p>\n<p>\u5168\u30b9\u30b3\u30fc\u30d7\u3067\u5229\u7528\u53ef\u80fd\u306a\u72b6\u614b\u3067\u3001\u30ea\u30ed\u30fc\u30c9\u3055\u308c\u308b\u307e\u3067\u6d88\u3048\u306a\u3044<\/p>\n<p>createContext\u3067\u4f5c\u3063\u305f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8(grobal state)\u3092\u4f5c\u308a\u3001\u305d\u308c\u3092\u5229\u7528\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30d5\u30c3\u30af\u3092\u4f5c\u308b<\/p>\n<p>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306f\u914d\u4e0b\u306e\u5b50\u3067\u5229\u7528\u53ef\u80fd\u3002\u3053\u308c\u306b\u3088\u308a\u69cb\u9020\u7684\u306b\u96e2\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3078\u306eprops\u30d0\u30b1\u30c4\u30ea\u30ec\u30fc\u304c\u306a\u304f\u306a\u308b<br \/>\n\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306fRouter\u306e\u89aa\u306a\u306e\u3067\u3001\u5168\u3066\u306e\u30da\u30fc\u30b8\u3001\u5168\u3066\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u5229\u7528\u53ef\u80fd\u306agrobal state\u306b\u306a\u308b<\/p>\n<p>\u3069\u3053\u304b\u3089\u3067\u3082\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u72b6\u614b\u306f\u306a\u308b\u3079\u304f\u5fc5\u8981\u6700\u4f4e\u9650\u306b\u6b62\u3081\u308b<\/p>\n<h1>\u4f18\u5316\u4e0a\u4e0b\u6587<\/h1>\n<p>\u4f7f\u7528React\u7684context API\u6765\u4f18\u5316\u5168\u5c40\u72b6\u6001\u7684\u6e32\u67d3\u7684\u4f8b\u5b50\u3002<\/p>\n<p>\/src\/ContextOptimize.tsx \u7684\u539f\u56e0<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountContext<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">createContext<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">SetCountContext<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">createContext<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">Dispatch<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">SetStateAction<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;&gt;&gt;<\/span><span class=\"p\">(<\/span>\r\n  <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"kc\">undefined<\/span>\r\n<span class=\"p\">);<\/span>\r\n\r\n<span class=\"kr\">interface<\/span> <span class=\"nx\">CountProviderProps<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">children<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">ReactNode<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">CountOptimizeProvider<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">CountProviderProps<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">({<\/span> <span class=\"nx\">children<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">CountContext<\/span><span class=\"p\">.<\/span><span class=\"nc\">Provider<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">SetCountContext<\/span><span class=\"p\">.<\/span><span class=\"nc\">Provider<\/span> <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">setCount<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\r\n        <span class=\"si\">{<\/span><span class=\"nx\">children<\/span><span class=\"si\">}<\/span>\r\n      <span class=\"p\">&lt;\/<\/span><span class=\"nc\">SetCountContext<\/span><span class=\"p\">.<\/span><span class=\"nc\">Provider<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">CountContext<\/span><span class=\"p\">.<\/span><span class=\"nc\">Provider<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useCountValue<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useContext<\/span><span class=\"p\">(<\/span><span class=\"nx\">CountContext<\/span><span class=\"p\">);<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useCountSetValue<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useContext<\/span><span class=\"p\">(<\/span><span class=\"nx\">SetCountContext<\/span><span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<p>\/src\/components\/ContextOptimize.tsx \u7684\u6c49\u8bed\u7ffb\u8bd1\u53ea\u9700\u8981\u4e00\u79cd\u5904\u7406\u65b9\u5f0f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useNavigate<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-router-dom<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useCountValue<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useCountSetValue<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">..\/ContextOptimize<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCountValue<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountResetComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCountSetValue<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ResetComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUpComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCountSetValue<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountUpComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">ContextOptimizeComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">navigate<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useNavigate<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ContextOptimizeComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountResetComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUpComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">navigate<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/use-state<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>go \/use-state<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">ContextOptimizeComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx\u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ import { CountOptimizeProvider } from '.\/ContextOptimize';\r\n+ import ContextOptimize from '.\/components\/ContextOptimize';\r\n<\/span>\r\n<span class=\"p\">export const Providers: React.FC&lt;ProvidersProps&gt; = ({ children }) =&gt; {\r\n<\/span>  return (\r\n<span class=\"gd\">-   &lt;CountProvider&gt;\r\n-     {children}\r\n-   &lt;\/CountProvider&gt;\r\n<\/span><span class=\"gi\">+   &lt;CountProvider&gt;\r\n+     &lt;CountOptimizeProvider&gt;\r\n+      {children}\r\n+     &lt;\/CountOptimizeProvider&gt;\r\n+   &lt;\/CountProvider&gt;\r\n<\/span>  );\r\n};\r\n\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;Providers&gt;\r\n    &lt;BrowserRouter&gt;\r\n      &lt;Routes&gt;\r\n        ...\r\n<span class=\"gi\">+       &lt;Route path=\"\/context-optimize\" element={&lt;ContextOptimize \/&gt;} \/&gt;\r\n<\/span>        ...\r\n      &lt;\/Routes&gt;\r\n    &lt;\/BrowserRouter&gt;\r\n  &lt;\/Providers&gt;\r\n);\r\n\r\n<span class=\"p\">export default App;\r\n<\/span><\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">context\u306e\u4f8b\u306b\u306f\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6700\u9069\u5316\u306e\u9762\u3067\u554f\u984c<\/ul>\n<\/li>\n<\/ul>\n<p>+\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u969b\u3001\u5024\u3092\u5229\u7528\u3057\u3066\u3044\u308bCountComponent\u4ee5\u5916\u306b\u3082\u30bb\u30c3\u30bf\u30fc\u3092\u5229\u7528\u3057\u3066\u3044\u308bResetComponent\u3084CountUpComponent\u3082\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<br \/>\n\u5024\u3068\u30bb\u30c3\u30bf\u30fc\u542b\u3081\u540c\u4e00\u306econtext\u304c\u4f5c\u3089\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5024\u3060\u3051\u304c\u5909\u5316\u3057\u305f\u5834\u5408\u3082\u30bb\u30c3\u30bf\u30fc\u5229\u7528\u5074\u304c\u7121\u99c4\u306b\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<\/p>\n<p>\u5024\u3068\u30bb\u30c3\u30bf\u30fc\u3092\u5225\u3005\u306econtext\u3067\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/p>\n<p>+\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u969b\u3001\u5024\u3092\u5229\u7528\u3057\u3066\u3044\u308bCountComponent\u306e\u307f\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u3001\u30bb\u30c3\u30bf\u30fc\u5229\u7528\u3057\u3066\u308bResetComponent\u3084CountUpComponent\u306f\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u306a\u3044<\/p>\n<h1>\u53cd\u5f39<\/h1>\n<p>\u4f7f\u7528\u72b6\u6001\u7ba1\u7406\u5e93recoil\u7684\u5168\u5c40\u72b6\u6001\u4f7f\u7528\u793a\u4f8b\u3002<\/p>\n<p>\/src\/components\/Recoil.tsx \u7684\u4e2d\u6587\u7ffb\u8bd1\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useNavigate<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-router-dom<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">atom<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useRecoilState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">state<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">atom<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">count<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">default<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">useCounter<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRecoilState<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">increment<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">setCount<\/span><span class=\"p\">((<\/span><span class=\"nx\">count<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">reset<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">increment<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reset<\/span> <span class=\"p\">};<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountResetComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">reset<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ResetComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">reset<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUpComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">increment<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountUpComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">increment<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">RecoilComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">navigate<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useNavigate<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">RecoilComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountResetComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUpComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">navigate<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/use-state<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>go \/use-state<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">RecoilComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u5185\u5bb9<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ import { RecoilRoot } from 'recoil';\r\n+ import Recoil from '.\/components\/Recoil';\r\n<\/span>\r\n<span class=\"p\">export const Providers: React.FC&lt;ProvidersProps&gt; = ({ children }) =&gt; {\r\n<\/span>  return (\r\n<span class=\"gd\">-   &lt;CountProvider&gt;\r\n-     &lt;CountOptimizeProvider&gt;\r\n-      {children}\r\n-     &lt;\/CountOptimizeProvider&gt;\r\n-   &lt;\/CountProvider&gt;\r\n<\/span><span class=\"gi\">+   &lt;CountProvider&gt;\r\n+     &lt;CountOptimizeProvider&gt;\r\n+       &lt;RecoilRoot&gt;\r\n+         {children}\r\n+       &lt;\/RecoilRoot&gt;\r\n+     &lt;\/CountOptimizeProvider&gt;\r\n+   &lt;\/CountProvider&gt;\r\n<\/span>  );\r\n};\r\n\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;Providers&gt;\r\n    &lt;BrowserRouter&gt;\r\n      &lt;Routes&gt;\r\n        ...\r\n<span class=\"gi\">+       &lt;Route path=\"\/recoil\" element={&lt;Recoil \/&gt;} \/&gt;\r\n<\/span>        ...\r\n      &lt;\/Routes&gt;\r\n    &lt;\/BrowserRouter&gt;\r\n  &lt;\/Providers&gt;\r\n);\r\n\r\n<span class=\"p\">export default App;\r\n<\/span><\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">recoil\u3092\u4f7f\u3046\u3068RecoilRoot\u3067\u56f2\u3080\u3060\u3051\u3067\u3001context api\u306e\u3088\u3046\u306bgrobal state\u3084\u5024\u3068\u30bb\u30c3\u30bf\u30fc\u6bce\u306bProvider\u3092\u7528\u610f\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">atom\u306e\u5b9a\u7fa9\u3068useState\u30e9\u30a4\u30af\u306auseRecoilState\u3092\u4f7f\u3063\u3066grobal state\u3092\u5b9a\u7fa9\u53ef\u80fd<\/ul>\n<h1>\u4f18\u5316\u540e\u5ea7\u529b<\/h1>\n<p>\u4f7f\u7528\u72b6\u6001\u7ba1\u7406\u5e93recoil\u6765\u4f18\u5316\u5168\u5c40\u72b6\u6001\u7684\u6e32\u67d3\u7684\u793a\u4f8b\u3002<\/p>\n<p>\/src\/components\/RecoilOptimize.tsx\u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1\u4e3a\u4ee5\u4e0b\u9009\u9879\u4e2d\u7684\u4e00\u4e2a\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useNavigate<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-router-dom<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">atom<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useRecoilValue<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useSetRecoilState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">state<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">atom<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">count-optimize<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">default<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">useCount<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">useRecoilValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">);<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">useSetCount<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">useSetRecoilState<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCount<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountResetComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useSetCount<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ResetComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUpComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useSetCount<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountUpComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"nx\">prevCount<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prevCount<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">RecoilOptimizeComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">navigate<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useNavigate<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">RecoilOptimizeComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountResetComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUpComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">navigate<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/use-state<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>go \/use-state<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">RecoilOptimizeComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx\u7684\u539f\u6587\u4e3a\u82f1\u6587\uff0c\u5b83\u7684\u610f\u601d\u662f&#8221;\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u8981\u6587\u4ef6\u662fApp.tsx&#8221;\u3002\u5728\u4e2d\u6587\u4e2d\u53ef\u4ee5\u8fd9\u6837\u8868\u8fbe\uff1a\u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u8981\u6587\u4ef6\u662f\/App.tsx\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ import RecoilOptimize from '.\/components\/RecoilOptimize';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;Providers&gt;\r\n    &lt;BrowserRouter&gt;\r\n      &lt;Routes&gt;\r\n        ...\r\n<span class=\"gi\">+       &lt;Route path=\"\/recoil-optimize\" element={&lt;RecoilOptimize \/&gt;} \/&gt;\r\n<\/span>        ...\r\n      &lt;\/Routes&gt;\r\n    &lt;\/BrowserRouter&gt;\r\n  &lt;\/Providers&gt;\r\n);\r\n\r\n<span class=\"p\">export default App;\r\n<\/span><\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">recoil\u306e\u4f8b\u3067\u306fcontext\u306e\u4f8b\u3068\u540c\u69d8\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6700\u9069\u5316\u306e\u9762\u3067\u554f\u984c<\/ul>\n<\/li>\n<\/ul>\n<p>+\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u969b\u3001\u5024\u3092\u5229\u7528\u3057\u3066\u3044\u308bCountComponent\u4ee5\u5916\u306b\u3082\u30bb\u30c3\u30bf\u30fc\u3092\u5229\u7528\u3057\u3066\u3044\u308bResetComponent\u3084CountUpComponent\u3082\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<br \/>\n\u5024\u3068\u30bb\u30c3\u30bf\u30fc\u542b\u3081\u540c\u4e00\u306econtext\u304c\u4f5c\u3089\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5024\u3060\u3051\u304c\u5909\u5316\u3057\u305f\u5834\u5408\u3082\u30bb\u30c3\u30bf\u30fc\u5229\u7528\u5074\u304c\u7121\u99c4\u306b\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u308b<\/p>\n<p>useRecoilState\u306e\u4ee3\u308f\u308a\u306b\u5024\u3092\u5229\u7528\u3059\u308buseRecoilValue\u3084\u30bb\u30c3\u30bf\u30fc\u3092\u5229\u7528\u3059\u308buseSetRecoilState\u3092\u5225\u3005\u306b\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/p>\n<p>+\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u969b\u3001\u5024\u3092\u5229\u7528\u3057\u3066\u3044\u308bCountComponent\u306e\u307f\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u3001\u30bb\u30c3\u30bf\u30fc\u5229\u7528\u3057\u3066\u308bResetComponent\u3084CountUpComponent\u306f\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u306a\u3044<\/p>\n<h1>\u53cd\u5f39\u81ea\u5b9a\u4e49\u94a9\u5b50 z\u00ec zi)<\/h1>\n<p>\u5c06\u5168\u5c40\u72b6\u6001\u7684\u903b\u8f91\u4e0e\u7ec4\u4ef6\u5206\u79bb\uff0c\u4f7f\u5176\u5177\u5907\u53ef\u6d4b\u8bd5\u6027\u7684\u793a\u4f8b\u3002<\/p>\n<p>\/src\/components\/RecoilCustomHookStore.tsx \u7684\u4e2d\u6587\u7ffb\u8bd1\u9009\u9879\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">atom<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useRecoilValue<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useSetRecoilState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ \u30ab\u30d7\u30bb\u30eb\u5316\u306e\u305f\u3081\u306b\u901a\u5e38export\u3057\u306a\u3044<\/span>\r\n<span class=\"c1\">\/\/ renderRecoilHook\u3092\u5229\u7528\u3057\u305f\u521d\u671f\u72b6\u614b\u4ed8\u304d\u306e\u30c6\u30b9\u30c8\u3092\u3059\u308b\u5834\u5408\u306fexport<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">state<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">atom<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">count-test<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">default<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useCount<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">useRecoilValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useIncrement<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useSetRecoilState<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useCallback<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nf\">setCount<\/span><span class=\"p\">((<\/span><span class=\"nx\">count<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"nx\">setCount<\/span><span class=\"p\">],<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">useReset<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">setCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useSetRecoilState<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">useCallback<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nf\">setCount<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"nx\">setCount<\/span><span class=\"p\">],<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<p>\/src\/components\/RecoilCustomHook.tsx \u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1\u9009\u9879\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useCount<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useReset<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useIncrement<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/RecoilCustomHookStore<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCount<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountResetComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">reset<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useReset<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">ResetComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">reset<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>Reset<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUpComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">increment<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useIncrement<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">CountUpComponent render<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">increment<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">RecoilCustomHookComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountResetComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUpComponent<\/span> <span class=\"p\">\/&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">RecoilCustomHookComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx \u7684\u4e2d\u6587\u672c\u5730\u5316\u6539\u5199\uff1a<\/p>\n<p>\/src\/App.tsx<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ import RecoilCustomHook from '.\/components\/RecoilCustomHook';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;Providers&gt;\r\n    &lt;BrowserRouter&gt;\r\n      &lt;Routes&gt;\r\n        ...\r\n<span class=\"gi\">+       &lt;Route path=\"\/recoil-custom-hook\" element={&lt;RecoilCustomHook \/&gt;} \/&gt;\r\n<\/span>        ...\r\n      &lt;\/Routes&gt;\r\n    &lt;\/BrowserRouter&gt;\r\n  &lt;\/Providers&gt;\r\n);\r\n\r\n<span class=\"p\">export default App;\r\n<\/span><\/code><\/pre>\n<ul class=\"post-ul\">\u30ab\u30b9\u30bf\u30e0\u30d5\u30c3\u30af\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5206\u96e2\u3067\u304d\u308b<\/ul>\n<h2>\u8003\u8bd5 sh\u00ec)<\/h2>\n<p>\/src\/components\/RecoilCustomHook.test.tsx\u7684\u4e2d\u6587\u540c\u4e49\u77ed\u8bed<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cleanup<\/span><span class=\"p\">,<\/span> <span class=\"nx\">render<\/span><span class=\"p\">,<\/span> <span class=\"nx\">screen<\/span><span class=\"p\">,<\/span> <span class=\"nx\">fireEvent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@testing-library\/react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">RecoilRoot<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">RecoilCustomHook<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/RecoilCustomHook<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"o\">*<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">RecoilCustomHookStoreModule<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/RecoilCustomHookStore<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nf\">afterEach<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">cleanup<\/span><span class=\"p\">());<\/span>\r\n\r\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">RecoilCustomHook<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">RecoilCustomHook\u304c\u8868\u793a\u3055\u308c\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">asFragment<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">RecoilRoot<\/span><span class=\"p\">&gt;<\/span>\r\n        <span class=\"p\">&lt;<\/span><span class=\"nc\">RecoilCustomHook<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;\/<\/span><span class=\"nc\">RecoilRoot<\/span><span class=\"p\">&gt;,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nf\">asFragment<\/span><span class=\"p\">()).<\/span><span class=\"nf\">toMatchSnapshot<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">+\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u308b\u3068increment\u304c\u547c\u3070\u308c\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">mockIncrement<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">fn<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">spyOn<\/span><span class=\"p\">(<\/span><span class=\"nx\">RecoilCustomHookStoreModule<\/span><span class=\"p\">,<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">useIncrement<\/span><span class=\"dl\">'<\/span><span class=\"p\">).<\/span><span class=\"nf\">mockReturnValueOnce<\/span><span class=\"p\">(<\/span><span class=\"nx\">mockIncrement<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">RecoilRoot<\/span><span class=\"p\">&gt;<\/span>\r\n        <span class=\"p\">&lt;<\/span><span class=\"nc\">RecoilCustomHook<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;\/<\/span><span class=\"nc\">RecoilRoot<\/span><span class=\"p\">&gt;,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">button<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">screen<\/span><span class=\"p\">.<\/span><span class=\"nf\">getByRole<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">button<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">+<\/span><span class=\"dl\">'<\/span> <span class=\"p\">});<\/span>\r\n    <span class=\"nx\">fireEvent<\/span><span class=\"p\">.<\/span><span class=\"nf\">click<\/span><span class=\"p\">(<\/span><span class=\"nx\">button<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">mockIncrement<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBeCalled<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Reset\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u308b\u3068reset\u304c\u547c\u3070\u308c\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">mockReset<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">fn<\/span><span class=\"p\">();<\/span>\r\n    <span class=\"nx\">jest<\/span><span class=\"p\">.<\/span><span class=\"nf\">spyOn<\/span><span class=\"p\">(<\/span><span class=\"nx\">RecoilCustomHookStoreModule<\/span><span class=\"p\">,<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">useReset<\/span><span class=\"dl\">'<\/span><span class=\"p\">).<\/span><span class=\"nf\">mockReturnValueOnce<\/span><span class=\"p\">(<\/span><span class=\"nx\">mockReset<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">RecoilRoot<\/span><span class=\"p\">&gt;<\/span>\r\n        <span class=\"p\">&lt;<\/span><span class=\"nc\">RecoilCustomHook<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;\/<\/span><span class=\"nc\">RecoilRoot<\/span><span class=\"p\">&gt;,<\/span>\r\n    <span class=\"p\">);<\/span>\r\n\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">button<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">screen<\/span><span class=\"p\">.<\/span><span class=\"nf\">getByRole<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">button<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Reset<\/span><span class=\"dl\">'<\/span> <span class=\"p\">});<\/span>\r\n    <span class=\"nx\">fireEvent<\/span><span class=\"p\">.<\/span><span class=\"nf\">click<\/span><span class=\"p\">(<\/span><span class=\"nx\">button<\/span><span class=\"p\">);<\/span>\r\n\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">mockReset<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBeCalled<\/span><span class=\"p\">();<\/span>\r\n  <span class=\"p\">});<\/span>\r\n<span class=\"p\">});<\/span>\r\n<\/code><\/pre>\n<p>\/src\/components\/RecoilCustomHookStore.test.tsx \u7684\u4e2d\u6587\u672c\u5730\u5316\u7ffb\u8bd1\uff1a\/src\/components\/RecoilCustomHookStore\u6d4b\u8bd5.tsx<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">renderRecoilHook<\/span><span class=\"p\">,<\/span> <span class=\"nx\">act<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react-recoil-hooks-testing-library<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">state<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useCount<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useReset<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useIncrement<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/RecoilCustomHookStore<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">useCount<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\u73fe\u5728\u306ecount\u5024\u3092\u8fd4\u3059<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">renderRecoilHook<\/span><span class=\"p\">(<\/span><span class=\"nx\">useCount<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">});<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">useIncrement<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">count\u3092 +1 \u3059\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">renderRecoilHook<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCount<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">increment<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useIncrement<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">increment<\/span> <span class=\"p\">};<\/span>\r\n    <span class=\"p\">});<\/span>\r\n    <span class=\"nf\">act<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">increment<\/span><span class=\"p\">()<\/span> <span class=\"p\">});<\/span>\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">});<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">useReset<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">count\u3092 0 \u306b\u3059\u308b<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">renderRecoilHook<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCount<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">reset<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useReset<\/span><span class=\"p\">();<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reset<\/span> <span class=\"p\">};<\/span>\r\n    <span class=\"p\">},<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"na\">states<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span> <span class=\"na\">recoilState<\/span><span class=\"p\">:<\/span> <span class=\"nx\">state<\/span><span class=\"p\">,<\/span> <span class=\"na\">initialValue<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span> <span class=\"p\">}],<\/span>\r\n    <span class=\"p\">});<\/span>\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"nf\">act<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">reset<\/span><span class=\"p\">()<\/span> <span class=\"p\">});<\/span>\r\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">});<\/span>\r\n<span class=\"p\">});<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ed\u30b8\u30c3\u30af\u3092\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5206\u96e2\u3057\u305f\u306e\u3067\u898b\u901a\u3057\u304c\u826f\u304f\u3001\u305d\u308c\u305e\u308c\u306e\u5f79\u5272\u306b\u3064\u3044\u3066\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30c6\u30b9\u30c8\u306b\u3088\u308b\u898b\u305f\u76ee\u306e\u5909\u5316\u3068\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u52d5\u4f5c(xxx\u3092\u547c\u3073\u51fa\u3059\u306a\u3069)\u306e\u307f\u30c6\u30b9\u30c8\u3002\u30ed\u30b8\u30c3\u30af\u306b\u3064\u3044\u3066\u306f\u30c6\u30b9\u30c8\u3057\u306a\u304f\u3066\u3044\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ed\u30b8\u30c3\u30af(\u30ab\u30b9\u30bf\u30e0\u30d5\u30c3\u30af)\u306f\u305d\u306e\u51e6\u7406\u5358\u4f53\u3092\u30c6\u30b9\u30c8<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u6ce8\u610f: \u30ab\u30d7\u30bb\u30eb\u5316\u306e\u305f\u3081\u901a\u5e38atom\u3067\u4f5c\u3063\u305fstate\u306fexport\u3057\u306a\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>initialValue\u3092\u8a2d\u5b9a\u53ef\u80fd\u306a\u30c6\u30b9\u30c8\u306e\u5229\u4fbf\u6027\u3068state\u3092\u5225\u3067\u5229\u7528\u3055\u308c\u308b\u5371\u967a\u6027\u306f\u8868\u88cf\u4e00\u4f53\u306a\u306e\u3067\u8981\u691c\u8a0e<\/p>\n<h1>\u540e\u5750\u529b\u9009\u62e9\u5668<\/h1>\n<p>\u5229\u7528 recoil selector \u83b7\u53d6\u8ba1\u7b97\u503c\u5e76\u6291\u5236\u4e0d\u5fc5\u8981\u7684\u91cd\u65b0\u6267\u884c\u3002<\/p>\n<p>\/src\/components\/RecoilSelector.tsx\u7ec4\u4ef6\u8fdb\u884c\u91ca\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">atom<\/span><span class=\"p\">,<\/span> <span class=\"nx\">selector<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useRecoilState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useRecoilValue<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Box<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Box<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Typography<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Typography<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Button<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mui\/material\/Button<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">double<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">:<\/span> <span class=\"nx\">number<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">calculate double<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">value<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"nx\">value<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">state1<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">atom<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil-selector-count1<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">default<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">doubleState1<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">selector<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil-selector-count-double1<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">get<\/span><span class=\"p\">:<\/span> <span class=\"p\">({<\/span> <span class=\"kd\">get<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"nx\">state1<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"nf\">double<\/span><span class=\"p\">(<\/span><span class=\"nx\">count<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">},<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">useCounter1<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRecoilState<\/span><span class=\"p\">(<\/span><span class=\"nx\">state1<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">doubleCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRecoilValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">doubleState1<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">increment<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">setCount<\/span><span class=\"p\">((<\/span><span class=\"nx\">count<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">doubleCount<\/span><span class=\"p\">,<\/span> <span class=\"nx\">increment<\/span> <span class=\"p\">};<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">state2<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">atom<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">({<\/span>\r\n  <span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">recoil-selector-count2<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">default<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">});<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">useCounter2<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setCount<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRecoilState<\/span><span class=\"p\">(<\/span><span class=\"nx\">state2<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">increment<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nf\">setCount<\/span><span class=\"p\">((<\/span><span class=\"nx\">count<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">doubleCount<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">double<\/span><span class=\"p\">(<\/span><span class=\"nx\">count<\/span><span class=\"p\">);<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span><span class=\"p\">,<\/span> <span class=\"nx\">doubleCount<\/span><span class=\"p\">,<\/span> <span class=\"nx\">increment<\/span> <span class=\"p\">};<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">Count1Component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter1<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count1: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">DoubleCount1Component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">doubleCount<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter1<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>DoubleCount1: <span class=\"si\">{<\/span><span class=\"nx\">doubleCount<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUp1Component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">increment<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter1<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">increment<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">Count2Component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">count<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter2<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>Count2: <span class=\"si\">{<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">DoubleCount2Component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">doubleCount<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter2<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>DoubleCount2: <span class=\"si\">{<\/span><span class=\"nx\">doubleCount<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nc\">Typography<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">CountUp2Component<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">increment<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCounter2<\/span><span class=\"p\">();<\/span>\r\n\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">increment<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+<span class=\"p\">&lt;\/<\/span><span class=\"nc\">Button<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">RecoilSelectorComponent<\/span><span class=\"p\">:<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nx\">FC<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Count1Component<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">DoubleCount1Component<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUp1Component<\/span> <span class=\"p\">\/&gt;<\/span>\r\n\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Count2Component<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">DoubleCount2Component<\/span> <span class=\"p\">\/&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">CountUp2Component<\/span> <span class=\"p\">\/&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Box<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">RecoilSelectorComponent<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\/src\/App.tsx\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ import RecoilSelector from '.\/components\/RecoilSelector';\r\n<\/span>\r\n<span class=\"p\">const App: FC = () =&gt; (\r\n<\/span>  &lt;Providers&gt;\r\n    &lt;BrowserRouter&gt;\r\n      &lt;Routes&gt;\r\n        ...\r\n<span class=\"gi\">+       &lt;Route path=\"\/recoil-selector\" element={&lt;RecoilSelector \/&gt;} \/&gt;\r\n<\/span>        ...\r\n      &lt;\/Routes&gt;\r\n    &lt;\/BrowserRouter&gt;\r\n  &lt;\/Providers&gt;\r\n);\r\n\r\n<span class=\"p\">export default App;\r\n<\/span><\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">recoil selector\u3092\u5229\u7528\u3057\u305f\u8a08\u7b97\u5024\u306e\u53d6\u5f97\u3068\u4e0d\u8981\u306a\u518d\u5b9f\u884c\u306e\u6291\u5236<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">selector\u3092\u5229\u7528\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30d5\u30c3\u30af\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5206\u518d\u8a08\u7b97\u3055\u308c\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">selector\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001useRecoilValue\u306b\u6e21\u3057\u3066\u53d6\u5f97\u3067\u304d\u308b\u8a08\u7b97\u5024\u306e\u5b9a\u7fa9\u304c\u3067\u304d\u3001\u305d\u306eselector\u5185\u90e8\u3067\u5229\u7528\u3057\u3066\u3044\u308batom\u304c\u5909\u66f4\u3055\u308c\u306a\u3044\u9650\u308a\u518d\u5b9f\u884c\u306f\u6291\u5236\u3055\u308c\u308b<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u6211\u4f1a\u516c\u5f00\u516c\u53f8\u5185\u90e8\u4e3e\u529e\u7684React Recoil\u5b66\u4e60\u7814\u8ba8\u4f1a\u7684\u5185\u5bb9\u3002 \u5982\u679c\u6211\u9519\u4e86\uff0c\u8bf7\u5411\u6211\u6254\u77f3\u5934\uff01 &#038;nbsp [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-38247","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React hooks &amp; Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2react-hooks\u548crecoil\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React hooks &amp; Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u6211\u4f1a\u516c\u5f00\u516c\u53f8\u5185\u90e8\u4e3e\u529e\u7684React Recoil\u5b66\u4e60\u7814\u8ba8\u4f1a\u7684\u5185\u5bb9\u3002 \u5982\u679c\u6211\u9519\u4e86\uff0c\u8bf7\u5411\u6211\u6254\u77f3\u5934\uff01 &amp;nbsp [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2react-hooks\u548crecoil\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-26T22:35:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-03T19:05:59+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/\",\"name\":\"React hooks & Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-26T22:35:23+00:00\",\"dateModified\":\"2024-05-03T19:05:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React hooks &#038; Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"React hooks & Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2react-hooks\u548crecoil\/","og_locale":"zh_CN","og_type":"article","og_title":"React hooks & Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684","og_description":"\u9996\u5148 \u6211\u4f1a\u516c\u5f00\u516c\u53f8\u5185\u90e8\u4e3e\u529e\u7684React Recoil\u5b66\u4e60\u7814\u8ba8\u4f1a\u7684\u5185\u5bb9\u3002 \u5982\u679c\u6211\u9519\u4e86\uff0c\u8bf7\u5411\u6211\u6254\u77f3\u5934\uff01 &nbsp [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2react-hooks\u548crecoil\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-26T22:35:23+00:00","article_modified_time":"2024-05-03T19:05:59+00:00","author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"18 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/","name":"React hooks & Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-26T22:35:23+00:00","dateModified":"2024-05-03T19:05:59+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"React hooks &#038; Recoil\u7684\u901f\u67e5\u8868\u662f\u4e3a\u4e86\u7ed9\u5f00\u53d1\u8005\u63d0\u4f9b\u5feb\u901f\u67e5\u8be2React hooks\u548cRecoil\u76f8\u5173\u4fe1\u606f\u800c\u521b\u5efa\u7684"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/react-hooks-recoil%e7%9a%84%e9%80%9f%e6%9f%a5%e8%a1%a8%e6%98%af%e4%b8%ba%e4%ba%86%e7%bb%99%e5%bc%80%e5%8f%91%e8%80%85%e6%8f%90%e4%be%9b%e5%bf%ab%e9%80%9f%e6%9f%a5%e8%af%a2react-hooks%e5%92%8crecoil\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=38247"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38247\/revisions"}],"predecessor-version":[{"id":95737,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38247\/revisions\/95737"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=38247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=38247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=38247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}