{"id":38062,"date":"2022-11-17T22:38:40","date_gmt":"2023-03-19T10:38:52","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/"},"modified":"2024-04-29T01:13:28","modified_gmt":"2024-04-28T17:13:28","slug":"%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/","title":{"rendered":"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0"},"content":{"rendered":"<h2>\u9996\u5148<\/h2>\n<p>\u6309\u7167\u6807\u9898\u6240\u793a\uff0c\u6211\u4eec\u5c06\u4f7f\u7528React\u6765\u5b9e\u73b0flux\u8bbe\u8ba1\u6a21\u5f0f\u3002<\/p>\n<h2>\u6210\u54c1<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d31ee37434c4406c60782\/3-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2023-11-25 13.06.01.png\" \/><\/div>\n<p>&nbsp;<\/p>\n<h3>\u4eb2\u81ea\u52a8\u624b<\/h3>\n<pre class=\"post-pre\"><code>~\/develop\/react\/react_flux<span class=\"nv\">$ <\/span>tree <span class=\"nt\">-I<\/span> node_modules \r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 README.md\r\n\u251c\u2500\u2500 package.json\r\n\u251c\u2500\u2500 public\r\n\u2502   \u251c\u2500\u2500 favicon.ico\r\n\u2502   \u251c\u2500\u2500 index.html\r\n\u2502   \u251c\u2500\u2500 logo192.png\r\n\u2502   \u251c\u2500\u2500 logo512.png\r\n\u2502   \u251c\u2500\u2500 manifest.json\r\n\u2502   \u2514\u2500\u2500 robots.txt\r\n\u251c\u2500\u2500 src\r\n\u2502   \u251c\u2500\u2500 App.tsx\r\n\u2502   \u251c\u2500\u2500 Counter.tsx\r\n\u2502   \u251c\u2500\u2500 commons\r\n\u2502   \u2502   \u251c\u2500\u2500 Store.tsx\r\n\u2502   \u2502   \u251c\u2500\u2500 actions.ts\r\n\u2502   \u2502   \u251c\u2500\u2500 counterReducer.ts\r\n\u2502   \u2502   \u251c\u2500\u2500 reducer.ts\r\n\u2502   \u2502   \u2514\u2500\u2500 state.ts\r\n\u2502   \u251c\u2500\u2500 index.tsx\r\n\u2502   \u2514\u2500\u2500 logo.svg\r\n\u251c\u2500\u2500 tsconfig.json\r\n\u2514\u2500\u2500 yarn.lock\r\n\r\n4 directories, 19 files\r\n<\/code><\/pre>\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=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">ReactDOM<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react-dom\/client<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">App<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/App<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">root<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">ReactDOM<\/span><span class=\"p\">.<\/span><span class=\"nf\">createRoot<\/span><span class=\"p\">(<\/span>\r\n  <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nf\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">root<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">HTMLElement<\/span>\r\n<span class=\"p\">);<\/span>\r\n<span class=\"nx\">root<\/span><span class=\"p\">.<\/span><span class=\"nf\">render<\/span><span class=\"p\">(<\/span>\r\n  <span class=\"p\">&lt;<\/span><span class=\"nc\">React<\/span><span class=\"p\">.<\/span><span class=\"nc\">StrictMode<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">App<\/span> <span class=\"p\">\/&gt;<\/span>\r\n  <span class=\"p\">&lt;\/<\/span><span class=\"nc\">React<\/span><span class=\"p\">.<\/span><span class=\"nc\">StrictMode<\/span><span class=\"p\">&gt;<\/span>\r\n<span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useReducer<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">reducer<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/commons\/reducer<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">initialState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/commons\/state<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Store<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">StoreContext<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/commons\/Store<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Counter<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/Counter<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">function<\/span> <span class=\"nf\">App<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"c1\">\/\/\u3000state \u306f\u73fe\u5728\u306e\u72b6\u614b\u3092\u8868\u3059\u5909\u6570\u3001dispatch \u306f\u72b6\u614b\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306e\u95a2\u6570<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">state<\/span><span class=\"p\">,<\/span> <span class=\"nx\">dispatch<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useReducer<\/span><span class=\"p\">(<\/span><span class=\"nx\">reducer<\/span><span class=\"p\">,<\/span> <span class=\"nx\">initialState<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"c1\">\/\/ StoreContext \u306f\u3001state \u3068 dispatch \u3092\u4fdd\u6301\u3059\u308b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">context<\/span><span class=\"p\">:<\/span> <span class=\"nx\">StoreContext<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">state<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">dispatch<\/span><span class=\"p\">,<\/span>\r\n  <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\">Store<\/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\">context<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nc\">Counter<\/span> <span class=\"p\">\/&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nc\">Store<\/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=\"k\">default<\/span> <span class=\"nx\">App<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"nx\">React<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useContext<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"nx\">Store<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/commons\/Store<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">COUNTER_INCREMENT<\/span><span class=\"p\">,<\/span> <span class=\"nx\">COUNTER_RESET<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/commons\/actions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">Counter<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"c1\">\/\/ useContext \u3092\u4f7f\u3063\u3066 StoreContext \u304b\u3089 state \u3068 dispatch \u3092\u53d6\u5f97<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"nx\">context<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useContext<\/span><span class=\"p\">(<\/span><span class=\"nx\">Store<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">state<\/span><span class=\"p\">,<\/span> <span class=\"nx\">dispatch<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">context<\/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=\"nf\">dispatch<\/span><span class=\"p\">({<\/span> <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">COUNTER_INCREMENT<\/span> <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=\"nf\">dispatch<\/span><span class=\"p\">({<\/span> <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">COUNTER_RESET<\/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=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>\u73fe\u5728\u306e\u30ab\u30a6\u30f3\u30bf\u30fc\u5024\uff1a<span class=\"si\">{<\/span><span class=\"nx\">state<\/span><span class=\"p\">.<\/span><span class=\"nx\">counter<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span><span class=\"si\">}<\/span><span class=\"p\">&lt;\/<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">increment<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>+1<span class=\"p\">&lt;\/<\/span><span class=\"nt\">button<\/span><span class=\"p\">&gt;<\/span>\r\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">button<\/span> <span class=\"na\">onClick<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">reset<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\u30ea\u30bb\u30c3\u30c8<span class=\"p\">&lt;\/<\/span><span class=\"nt\">button<\/span><span class=\"p\">&gt;<\/span>\r\n    <span class=\"p\">&lt;\/<\/span><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">COUNTER_INCREMENT<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">INCREMENT<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">COUNTER_RESET<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">RESET<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">CounterActionTypes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">typeof<\/span> <span class=\"nx\">COUNTER_INCREMENT<\/span> <span class=\"o\">|<\/span> <span class=\"k\">typeof<\/span> <span class=\"nx\">COUNTER_RESET<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">ActionTypes<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">CounterActionTypes<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">type<\/span> <span class=\"nx\">Action<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">ActionTypes<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Reducer<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">COUNTER_INCREMENT<\/span><span class=\"p\">,<\/span> <span class=\"kd\">type<\/span> <span class=\"nx\">Action<\/span><span class=\"p\">,<\/span> <span class=\"nx\">COUNTER_RESET<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/actions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">GlobalState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/state<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">initialState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/state<\/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\">counterReducer<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Reducer<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">GlobalState<\/span><span class=\"p\">[<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">counter<\/span><span class=\"dl\">\"<\/span><span class=\"p\">],<\/span> <span class=\"nx\">Action<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\r\n  <span class=\"nx\">state<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nx\">action<\/span>\r\n<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><span class=\"kd\">type<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">case<\/span> <span class=\"na\">COUNTER_INCREMENT<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"kd\">const<\/span> <span class=\"nx\">count<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">state<\/span><span class=\"p\">.<\/span><span class=\"nx\">count<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"p\">...<\/span><span class=\"nx\">state<\/span><span class=\"p\">,<\/span>\r\n        <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=\"k\">case<\/span> <span class=\"na\">COUNTER_RESET<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"p\">...<\/span><span class=\"nx\">initialState<\/span><span class=\"p\">.<\/span><span class=\"nx\">counter<\/span> <span class=\"p\">};<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"nl\">default<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"k\">return<\/span> <span class=\"nx\">state<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Reducer<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Action<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/actions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">GlobalState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/state<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">counterReducer<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/counterReducer<\/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\">reducer<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Reducer<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">GlobalState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Action<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">,<\/span> <span class=\"nx\">action<\/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=\"nx\">action<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"na\">counter<\/span><span class=\"p\">:<\/span> <span class=\"nf\">counterReducer<\/span><span class=\"p\">(<\/span><span class=\"nx\">state<\/span><span class=\"p\">.<\/span><span class=\"nx\">counter<\/span><span class=\"p\">,<\/span> <span class=\"nx\">action<\/span><span class=\"p\">),<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Action<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/actions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">type<\/span> <span class=\"nx\">GlobalState<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">action<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Action<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">counter<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CounterState<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"kd\">type<\/span> <span class=\"nx\">CounterState<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">count<\/span><span class=\"p\">:<\/span> <span class=\"kr\">number<\/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\">initialState<\/span><span class=\"p\">:<\/span> <span class=\"nx\">GlobalState<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">action<\/span><span class=\"p\">:<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"na\">counter<\/span><span class=\"p\">:<\/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=\"p\">},<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">GlobalState<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/state<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">import<\/span> <span class=\"kd\">type<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Action<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/actions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"kd\">type<\/span> <span class=\"nx\">StoreContext<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">state<\/span><span class=\"p\">:<\/span> <span class=\"nx\">GlobalState<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"nl\">dispatch<\/span><span class=\"p\">:<\/span> <span class=\"p\">(<\/span><span class=\"na\">action<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Action<\/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\">Store<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">React<\/span><span class=\"p\">.<\/span><span class=\"nf\">createContext<\/span><span class=\"p\">({}<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">StoreContext<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">Store<\/span><span class=\"p\">;<\/span>\r\n\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u6309\u7167\u6807\u9898\u6240\u793a\uff0c\u6211\u4eec\u5c06\u4f7f\u7528React\u6765\u5b9e\u73b0flux\u8bbe\u8ba1\u6a21\u5f0f\u3002 \u6210\u54c1 &nbsp; \u4eb2\u81ea\u52a8\u624b ~\/devel [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-38062","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>\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0 - 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\/\u7528react\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u6309\u7167\u6807\u9898\u6240\u793a\uff0c\u6211\u4eec\u5c06\u4f7f\u7528React\u6765\u5b9e\u73b0flux\u8bbe\u8ba1\u6a21\u5f0f\u3002 \u6210\u54c1 &nbsp; \u4eb2\u81ea\u52a8\u624b ~\/devel [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528react\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-19T10:38:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T17:13:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d31ee37434c4406c60782\/3-0.png\" \/>\n<meta name=\"author\" content=\"\u79d1, \u9896\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u9896\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \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\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/\",\"name\":\"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-03-19T10:38:52+00:00\",\"dateModified\":\"2024-04-28T17:13:28+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0\"}]},{\"@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\/8ca01ba7f7362ad4edb7da206a12f29e\",\"name\":\"\u79d1, \u9896\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u9896\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0 - 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\/\u7528react\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0\/","og_locale":"zh_CN","og_type":"article","og_title":"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0","og_description":"\u9996\u5148 \u6309\u7167\u6807\u9898\u6240\u793a\uff0c\u6211\u4eec\u5c06\u4f7f\u7528React\u6765\u5b9e\u73b0flux\u8bbe\u8ba1\u6a21\u5f0f\u3002 \u6210\u54c1 &nbsp; \u4eb2\u81ea\u52a8\u624b ~\/devel [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528react\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-03-19T10:38:52+00:00","article_modified_time":"2024-04-28T17:13:28+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d31ee37434c4406c60782\/3-0.png"}],"author":"\u79d1, \u9896","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u9896","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/","name":"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-03-19T10:38:52+00:00","dateModified":"2024-04-28T17:13:28+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u7528React\u6765\u5b9e\u73b0flux\u6a21\u5f0f\u7684\u5b9e\u73b0"}]},{"@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\/8ca01ba7f7362ad4edb7da206a12f29e","name":"\u79d1, \u9896","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","caption":"\u79d1, \u9896"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8react%e6%9d%a5%e5%ae%9e%e7%8e%b0flux%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%ae%9e%e7%8e%b0\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38062","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\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=38062"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38062\/revisions"}],"predecessor-version":[{"id":70850,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/38062\/revisions\/70850"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=38062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=38062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=38062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}