{"id":6210,"date":"2022-05-23T01:54:33","date_gmt":"2022-05-22T17:54:33","guid":{"rendered":"https:\/\/www.lilichao.com\/?p=6210"},"modified":"2022-05-23T01:54:34","modified_gmt":"2022-05-22T17:54:34","slug":"redux-toolkit","status":"publish","type":"post","link":"https:\/\/lilichao.com\/?p=6210","title":{"rendered":"Redux Toolkit\uff08RTK\uff09"},"content":{"rendered":"\n<p>\u4e0a\u8fb9\u7684\u6848\u4f8b\u6211\u4eec\u4e00\u76f4\u5728\u4f7f\u7528Redux\u6838\u5fc3\u5e93\u6765\u4f7f\u7528Redux\uff0c\u9664\u4e86Redux\u6838\u5fc3\u5e93\u5916Redux\u8fd8\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u79cd\u4f7f\u7528Redux\u7684\u65b9\u5f0f\u2014\u2014Redux Toolkit\u3002\u5b83\u7684\u540d\u5b57\u8d77\u7684\u975e\u5e38\u76f4\u767d\uff0cRedux\u5de5\u5177\u5305\uff0c\u7b80\u79f0RTK\u3002RTK\u53ef\u4ee5\u5e2e\u52a9\u6211\u4eec\u5904\u7406\u4f7f\u7528Redux\u8fc7\u7a0b\u4e2d\u7684\u91cd\u590d\u6027\u5de5\u4f5c\uff0c\u7b80\u5316Redux\u4e2d\u7684\u5404\u79cd\u64cd\u4f5c\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5728React\u4e2d\u4f7f\u7528RTK<\/h3>\n\n\n\n<p>\u5b89\u88c5\uff0c\u65e0\u8bba\u662fRTK\u8fd8\u662fRedux\uff0c\u5728React\u4e2d\u4f7f\u7528\u65f6react-redux\u90fd\u662f\u5fc5\u4e0d\u53ef\u5c11\uff0c\u6240\u4ee5\u4f7f\u7528RTK\u4f9d\u7136\u9700\u8981\u5b89\u88c5\u4e24\u4e2a\u5305\uff1areact-redux\u548c@reduxjs\/toolkit\u3002<\/p>\n\n\n\n<p>npm<\/p>\n\n\n\n<p><code>npm install react-redux @reduxjs\/toolkit -S<\/code><\/p>\n\n\n\n<p>yarn<\/p>\n\n\n\n<p><code>yarn add react-redux @reduxjs\/toolkit<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4fee\u6539\u4e0a\u8fb9\u7684\u4f8b\u5b50<\/h3>\n\n\n\n<p>\u4f7f\u7528RTK\u65f6\uff0creducer\u4f9d\u7136\u53ef\u4ee5\u4f7f\u7528\u4e4b\u524d\u7684\u521b\u5efa\u65b9\u5f0f\u4e0d\u53d8\uff0c\u4f46\u662f\u4e0d\u5728\u9700\u8981\u5408\u5e76reducer\u3002RTK\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2aconfigureStore\u65b9\u6cd5\uff0c\u5b83\u76f4\u63a5\u63a5\u6536\u4e00\u4e2a\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\uff0c\u53ef\u4ee5\u5c06reducer\u7684\u76f8\u5173\u914d\u7f6e\u76f4\u63a5\u901a\u8fc7\u8be5\u5bf9\u8c61\u4f20\u9012\uff0c\u800c\u4e0d\u518d\u9700\u8981\u5355\u72ec\u5408\u5e76reducer\u3002<\/p>\n\n\n\n<p>\u4e0a\u4f8b\u4e2d\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const reducer = <em>combineReducers<\/em>({<br>    stu:stuReducer,<br>    school:schoolReducer<br>});<br><br>const store = <em>createStore<\/em>(reducer);<\/pre>\n\n\n\n<p>\u4fee\u6539\u4e3a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const store = <em>configureStore<\/em>({<br>    reducer:{<br>        stu:stuReducer,<br>        school:schoolReducer<br>    }<br>});<\/pre>\n\n\n\n<p>configureStore\u9700\u8981\u4e00\u4e2a\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\uff0c\u5728\u8fd9\u4e2a\u5bf9\u8c61\u4e2d\u53ef\u4ee5\u901a\u8fc7\u4e0d\u540c\u7684\u5c5e\u6027\u6765\u5bf9store\u8fdb\u884c\u8bbe\u7f6e\uff0c\u6bd4\u5982\uff1areducer\u5c5e\u6027\u7528\u6765\u8bbe\u7f6estore\u4e2d\u5173\u8054\u5230\u7684reducer\uff0cpreloadedState\u7528\u6765\u6307\u5b9astate\u7684\u521d\u59cb\u503c\u7b49\uff0c\u8fd8\u6709\u4e00\u4e9b\u503c\u6211\u4eec\u4f1a\u653e\u5230\u540e\u8fb9\u8bb2\u89e3\u3002<\/p>\n\n\n\n<p>reducer\u5c5e\u6027\u53ef\u4ee5\u76f4\u63a5\u4f20\u9012\u4e00\u4e2areducer\uff0c\u4e5f\u53ef\u4ee5\u4f20\u9012\u4e00\u4e2a\u5bf9\u8c61\u4f5c\u4e3a\u503c\u3002\u5982\u679c\u53ea\u4f20\u9012\u4e00\u4e2areducer\uff0c\u5219\u610f\u5473\u7740store\u4e2d\u53ea\u6709\u4e00\u4e2areducer\u3002\u82e5\u4f20\u9012\u4e00\u4e2a\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\uff0c\u5bf9\u8c61\u7684\u6bcf\u4e2a\u5c5e\u6027\u90fd\u53ef\u4ee5\u6267\u884c\u4e00\u4e2areducer\uff0c\u5728\u65b9\u6cd5\u5185\u90e8\u5b83\u4f1a\u81ea\u52a8\u5bf9\u8fd9\u4e9breducer\u8fdb\u884c\u5408\u5e76\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RTK\u7684API<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">createAction\uff08\u4e00\u822c\u4e0d\u76f4\u63a5\u7528\uff09<\/h3>\n\n\n\n<p>action\u662freducer\u4e2d\u7684\u7b2c\u4e8c\u4e2a\u53c2\u6570\uff0c\u5f53\u6211\u4eec\u901a\u8fc7dispatch\u5411reducer\u53d1\u9001\u6307\u4ee4\u65f6\u9700\u8981\u624b\u52a8\u521b\u5efaaction\u5bf9\u8c61\u5e76\u4f20\u9012\u3002action\u4e2d\u5e38\u89c1\u7684\u5c5e\u6027\u6709\u4e24\u4e2a\u4e00\u4e2a\u662ftype\u7528\u6765\u6307\u5b9a\u64cd\u4f5c\u7684\u7c7b\u578b\uff0c\u4e00\u4e2a\u662fpayload\u7528\u6765\u6307\u5b9a\u8981\u4f20\u9012\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<p>RTK\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u65b9\u6cd5createAction\uff0c\u7528\u6765\u5e2e\u52a9\u6211\u4eec\u521b\u5efaaction\u3002<\/p>\n\n\n\n<p><code>createAction(type, prepareAction?)<\/code><\/p>\n\n\n\n<p>\u5b83\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3atype\uff0c\u7528\u6765\u6307\u5b9aaction\u4e2d\u7684type\u5c5e\u6027\u3002\u7b2c\u4e8c\u4e2a\u53c2\u6570\u53ef\u9009\u5148\u5ffd\u7565\u5b83\u3002\u5b83\u7684\u8fd4\u56de\u503c\u662f\u4e00\u4e2a\u51fd\u6570\u3002\u6211\u4eec\u53ef\u4ee5\u8fd9\u4e48\u8c03\u7528\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">conconst setName= createAction('ADD');\n\nsetName(); \/\/ {type: 'ADD', payload: undefined}\nsetName('\u732a\u516b\u6212'); \/\/ {type: 'ADD', payload: '\u732a\u516b\u6212'}<\/pre>\n\n\n\n<p>\u8fd4\u56de\u503c\u7684\u51fd\u6570\u6211\u4eec\u53ef\u4ee5\u8c03\u7528\uff0c\u8c03\u7528\u8be5\u51fd\u6570\u540e\u4f1a\u5f97\u5230\u4e00\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u6709\u4e24\u4e2a\u5c5e\u6027type\u548cpayload\uff0ctype\u5c5e\u6027\u503c\u5c31\u662f\u6211\u4eec\u8c03\u7528createAction\u4f20\u9012\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\uff0c\u4e0a\u4f8b\u4e2dtype\u5c31\u662f&#8217;ADD&#8217;\u3002\u800cpayload\u5c5e\u6027\u5c31\u662f\u6211\u4eec\u8c03\u7528\u8be5\u51fd\u6570\u65f6\u4f20\u9012\u7684\u53c2\u6570\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const add = <em>createAction<\/em>('SET_NAME');\nadd(); <em>\/\/ {type: 'SET_NAME', payload: undefined}\n<\/em>add('\u732a\u516b\u6212'); <em>\/\/ {type: 'SET_NAME', payload: '<\/em><em>\u732a\u516b\u6212<\/em><em>'}<\/em><\/pre>\n\n\n\n<p>\u7b80\u5355\u8bf4\uff0ccreateAction\u4f1a\u8fd4\u56de\u4e00\u4e2a\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u7528\u6765\u521b\u5efa\u56fa\u5b9atype\u5c5e\u6027\u503c\u7684\u5bf9\u8c61\uff0c\u5e76\u4e14\u8fd9\u4e2a\u51fd\u6570\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\u4f1a\u6210\u4e3a\u65b0\u5efa\u5bf9\u8c61\u7684payload\u5c5e\u6027\u503c\u3002<\/p>\n\n\n\n<p>\u53ef\u4ee5\u901a\u8fc7creatAction\u4fee\u6539\u4e4b\u524d\u7684\u9879\u76ee\uff1a<\/p>\n\n\n\n<p>\u5148\u521b\u5efa\u56db\u4e2aaction\u51fd\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const setName = <em>createAction<\/em>('SET_NAME');<br>const setAge = <em>createAction<\/em>('SET_AGE');<br>const setAddress = <em>createAction<\/em>('SET_ADDRESS');<br>const setGender = <em>createAction<\/em>('SET_GENDER');<\/pre>\n\n\n\n<p>\u4fee\u6539dispatch<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dispatch(setName('\u732a\u516b\u6212'));\ndispatch(setAge(28));\ndispatch(setGender('\u5973'));\ndispatch(setAddress('\u9ad8\u8001\u5e84'));<\/pre>\n\n\n\n<p>createAction\u8fd4\u56de\u51fd\u6570\u6240\u521b\u5efa\u7684\u5bf9\u8c61\u7ed3\u6784\u662f\u56fa\u5b9a\u7684<code>{type:'xxx', payload:...}<\/code>\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5411createAction\u4f20\u9012\u7b2c\u4e8c\u4e2a\u53c2\u6570\u6765\u6307\u5b9apayload\u7684\u683c\u5f0f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const add = createAction('ADD', (name, age, gender, address) =&gt; {\n    return {\n        payload:{\n            name,\n            age,\n            gender,\n            address\n        }\n    }\n});\n\nadd('\u6c99\u548c\u5c1a', 38, '\u7537', '\u6d41\u6c99\u6cb3'); \/\/ {\"type\":\"ADD\",\"payload\":{\"name\":\"\u6c99\u548c\u5c1a\",\"age\":38,\"gender\":\"\u7537\",\"address\":\"\u6d41\u6c99\u6cb3\"}}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">createReucer\uff08\u4e00\u822c\u4e0d\u7528\uff09<\/h3>\n\n\n\n<p>\u8be5\u65b9\u6cd5\u7528\u6765\u662f\u521b\u5efareducer\u7684\u5de5\u5177\u65b9\u6cd5\u3002<\/p>\n\n\n\n<p><code>createReducer(initialState, builderCallback)<\/code><\/p>\n\n\n\n<p>\u53c2\u6570\uff1a<\/p>\n\n\n\n<p><code>initialState<\/code> \u2014\u2014 state\u7684\u521d\u59cb\u503c<\/p>\n\n\n\n<p><code>builderCallback<\/code> \u2014\u2014 \u5e26\u6709builer\u7684\u56de\u8c03\u51fd\u6570\uff0c\u53ef\u4ee5\u540cbuiler\u6765\u8bbe\u7f6ereducer\u7684\u903b\u8f91<\/p>\n\n\n\n<p>\u56de\u8c03\u51fd\u6570\u4e2d\u4f1a\u4f20\u9012\u4e00\u4e2abuilder\u4f5c\u4e3a\u53c2\u6570\uff0c\u901a\u8fc7\u901a\u8fc7builder\u53ef\u4ee5\u5c06action\u548c\u51fd\u6570\u8fdb\u884c\u7ed1\u5b9a\uff0c\u4f7f\u7528\u65f6\u53ef\u4ee5\u901a\u8fc7\u4f20\u9012\u6307\u5b9a\u7684action\u6765\u89e6\u53d1\u51fd\u6570\u7684\u8c03\u7528\u3002<\/p>\n\n\n\n<p>builder\u6709\u4e00\u4e2a\u5e38\u7528\u7684\u65b9\u6cd5addCase\uff0caddCase\u9700\u8981\u4e24\u4e2a\u53c2\u6570\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3aaction\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4e3a\u56de\u8c03\u51fd\u6570\u3002action\u76f4\u63a5\u4f20\u9012\u901a\u8fc7createAction\u6240\u521b\u5efa\u7684\u51fd\u6570\u5373\u53ef\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u4e00\u4e2a\u56de\u8c03\u51fd\u6570\uff0c\u56de\u8c03\u51fd\u6570\u7c7b\u4f3c\u4e8ereducer\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3astate\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4e3aaction\u3002\u4f46\u53c8\u548creducer\u4e0d\u540c\uff0c\u8be5\u56de\u8c03\u51fd\u6570\u4e2d\u8fd4\u56de\u7684state\u662f\u4e00\u4e2a\u4ee3\u7406\u5bf9\u8c61\uff0c\u53ef\u4ee5\u76f4\u63a5\u5bf9\u8be5\u5bf9\u8c61\u4fee\u6539\uff0cRTK\u4f1a\u81ea\u52a8\u5b8c\u6210\u5176\u4f59\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ \u521b\u5efaaction\nconst setName = <em>createAction<\/em>('setName');\n\n\/\/ \u521b\u5efareducer\nconst stuReducer = createReducer({\n        name: '\u5b59\u609f\u7a7a',\n        age: 18,\n        gender: '\u7537',\n        address: '\u82b1\u679c\u5c71'\n    }, builder => {\n        \/\/ \u901a\u8fc7builder\u5c06action\u548c\u56de\u8c03\u51fd\u6570\u8fdb\u884c\u7ed1\u5b9a\n        builder.addCase(setName, (state, action) => {\n            \/\/ \u8fd9\u91cc\u7684state\u662f\u4ee3\u7406\u5bf9\u8c61\uff0c\u53ef\u4ee5\u76f4\u63a5\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\n            state.name = action.payload;\n        });\n    }\n);\n\n\/\/ \u914d\u7f6ereducer\nconst store = configureStore({\r\n    reducer: {\r\n        stu: stuReducer,\r\n        school: schoolReducer\r\n    }\r\n});\n\n\/\/ \u53d1\u9001\u6307\u4ee4\u4fee\u6539name\u5c5e\u6027\ndispatch(setName('\u732a\u516b\u6212'));<\/pre>\n\n\n\n<p>\u65e0\u8bba\u662fcreateAction\u548ccreateReducer\u90fd\u4e0d\u662fRTK\u4e2d\u7684\u5e38\u7528\u65b9\u5f0f\uff08\u8981\u662f\u8fd9\u4e48\u5199\u4ee3\u7801\uff0c\u53ef\u80fd\u5f97\u75af\uff09\u3002\u4ecb\u7ecd\u4ed6\u4eec\u53ea\u662f\u5e0c\u671b\u4f60\u80fd\u4e86\u89e3\u4e00\u4e0bRTK\u7684\u8fd0\u884c\u65b9\u5f0f\u3002\u5bf9\u4e8e\u6211\u4eec\u6765\u521b\u5efareducer\u65f6\u6700\u6700\u5e38\u7528\u7684\u65b9\u5f0f\u662f\uff1acreateSlice\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">createSlice<\/h2>\n\n\n\n<p>createSlice\u662f\u4e00\u4e2a\u5168\u81ea\u52a8\u7684\u521b\u5efareducer\u5207\u7247\u7684\u65b9\u6cd5\uff0c\u5728\u5b83\u7684\u5185\u90e8\u8c03\u7528\u5c31\u662fcreateAction\u548ccreateReducer\uff0c\u4e4b\u6240\u4ee5\u5148\u4ecb\u7ecd\u90a3\u4e24\u4e2a\u4e5f\u662f\u8fd9\u4e2a\u539f\u56e0\u3002createSlice\u9700\u8981\u4e00\u4e2a\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\uff0c\u5bf9\u8c61\u4e2d\u901a\u8fc7\u4e0d\u540c\u7684\u5c5e\u6027\u6765\u6307\u5b9areducer\u7684\u914d\u7f6e\u4fe1\u606f\u3002<\/p>\n\n\n\n<p><code>createSlice(configuration object)<\/code><\/p>\n\n\n\n<p>\u914d\u7f6e\u5bf9\u8c61\u4e2d\u7684\u5c5e\u6027\uff1a<\/p>\n\n\n\n<p><code>initialState<\/code> \u2014\u2014 state\u7684\u521d\u59cb\u503c<\/p>\n\n\n\n<p><code>name<\/code> \u2014\u2014 reducer\u7684\u540d\u5b57\uff0c\u4f1a\u4f5c\u4e3aaction\u4e2dtype\u5c5e\u6027\u7684\u524d\u7f00\uff0c\u4e0d\u8981\u91cd\u590d<\/p>\n\n\n\n<p><code>reducers<\/code> \u2014\u2014 reducer\u7684\u5177\u4f53\u65b9\u6cd5\uff0c\u9700\u8981\u4e00\u4e2a\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\uff0c\u53ef\u4ee5\u4ee5\u65b9\u6cd5\u7684\u5f62\u5f0f\u6dfb\u52a0reducer\uff0cRTK\u4f1a\u81ea\u52a8\u751f\u6210action\u5bf9\u8c61\u3002<\/p>\n\n\n\n<p>\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const stuSlice= <em>createSlice<\/em>({\n    name:'stu',\n    initialState:{\n        name: '\u5b59\u609f\u7a7a',\n        age: 18,\n        gender: '\u7537',\n        address: '\u82b1\u679c\u5c71'\n    },\n    reducers:{\n        setName(state, action){\n            state.name = action.payload\n        }\n    }\n});<\/pre>\n\n\n\n<p>createSlice\u8fd4\u56de\u7684\u5e76\u4e0d\u662f\u4e00\u4e2areducer\u5bf9\u8c61\u800c\u662f\u4e00\u4e2aslice\u5bf9\u8c61\uff08\u5207\u7247\u5bf9\u8c61\uff09\u3002\u8fd9\u4e2a\u5bf9\u8c61\u4e2d\u6211\u4eec\u9700\u8981\u4f7f\u7528\u7684\u5c5e\u6027\u73b0\u5728\u6709\u4e24\u4e2a\u4e00\u4e2a\u53eb\u505aactions\uff0c\u4e00\u4e2a\u53eb\u505areducer\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">actions<\/h3>\n\n\n\n<p>\u5207\u7247\u5bf9\u8c61\u4f1a\u6839\u636e\u6211\u4eec\u5bf9\u8c61\u4e2d\u7684reducers\u65b9\u6cd5\u6765\u81ea\u52a8\u521b\u5efaaction\u5bf9\u8c61\uff0c\u8fd9\u4e9baction\u5bf9\u8c61\u4f1a\u5b58\u50a8\u5230\u5207\u7247\u5bf9\u8c61actions\u5c5e\u6027\u4e2d\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">stuSlice.actions; <em>\/\/ {setName: \u0192}<\/em><\/pre>\n\n\n\n<p>\u4e0a\u4f8b\u4e2d\uff0c\u6211\u4eec\u4ec5\u4ec5\u6307\u5b9a\u4e00\u4e2areducer\uff0c\u6240\u4ee5actions\u4e2d\u53ea\u6709\u4e00\u4e2a\u65b9\u6cd5setName\uff0c\u53ef\u4ee5\u901a\u8fc7\u89e3\u6784\u8d4b\u503c\u83b7\u53d6\u5230\u5207\u7247\u4e2d\u7684action\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const {setName} = stuSlice.actions;<\/code><\/pre>\n\n\n\n<p>\u5f00\u53d1\u4e2d\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u53d6\u51fa\u7684action\u5bf9\u8c61\u4f5c\u4e3a\u7ec4\u4ef6\u5411\u5916\u90e8\u5bfc\u51fa\uff0c\u5bfc\u51fa\u5176\u4ed6\u7ec4\u4ef6\u5c31\u53ef\u4ee5\u76f4\u63a5\u5bfc\u5165\u8fd9\u4e9baction\uff0c\u7136\u540e\u5373\u53ef\u901a\u8fc7action\u6765\u89e6\u53d1reducer\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">reducer<\/h3>\n\n\n\n<p>\u5207\u7247\u7684reducer\u5c5e\u6027\u662f\u5207\u7247\u6839\u636e\u6211\u4eec\u4f20\u9012\u7684\u65b9\u6cd5\u81ea\u52a8\u521b\u5efa\u751f\u6210\u7684reducer\uff0c\u9700\u8981\u5c06\u5176\u4f5c\u4e3areducer\u4f20\u9012\u8fdbconfigureStore\u7684\u914d\u7f6e\u5bf9\u8c61\u4e2d\u4ee5\u4f7f\u5176\u751f\u6548\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const store = <em>configureStore<\/em>({<br>    reducer: {<br>        stu: stuSlice.reducer,<br>        school: schoolReducer<br>    }<br>});<\/pre>\n\n\n\n<p>\u603b\u7684\u6765\u8bf4\uff0c\u4f7f\u7528createSlice\u521b\u5efa\u5207\u7247\u540e\uff0c\u5207\u7247\u4f1a\u81ea\u52a8\u6839\u636e\u914d\u7f6e\u5bf9\u8c61\u751f\u6210action\u548creducer\uff0caction\u9700\u8981\u5bfc\u51fa\u7ed9\u8c03\u7528\u5904\uff0c\u8c03\u7528\u5904\u53ef\u4ee5\u4f7f\u7528action\u4f5c\u4e3adispatch\u7684\u53c2\u6570\u89e6\u53d1state\u7684\u4fee\u6539\u3002reducer\u9700\u8981\u4f20\u9012\u7ed9configureStore\u4ee5\u4f7f\u5176\u5728\u4ed3\u5e93\u4e2d\u751f\u6548\u3002<\/p>\n\n\n\n<p>\u5b8c\u6574\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import ReactDOM from 'react-dom\/client';<br>import {<em>Provider<\/em>, <em>useDispatch<\/em>, <em>useSelector<\/em>} from \"react-redux\";<br>import {<em>configureStore<\/em>, <em>createSlice<\/em>} from \"@reduxjs\/toolkit\";<br><br>const stuSlice = <em>createSlice<\/em>({<br>    name: 'stu',<br>    initialState: {<br>        name: '\u5b59\u609f\u7a7a',<br>        age: 18,<br>        gender: '\u7537',<br>        address: '\u82b1\u679c\u5c71'<br>    },<br>    reducers: {<br>        setName(state, action) {<br>            state.name = action.payload;<br>        },<br>        setAge(state, action) {<br>            state.age = action.payload;<br>        },<br>        setGender(state, action) {<br>            state.gender = action.payload;<br>        },<br>        setAddress(state, action) {<br>            state.gender = action.payload;<br>        }<br>    }<br>});<br><br>const {setName, setAge, setGender, setAddress} = stuSlice.actions;<br><br>const schoolSlice = <em>createSlice<\/em>({<br>    name: 'school',<br>    initialState: {<br>        name: '\u82b1\u679c\u5c71\u4e00\u5c0f',<br>        address: '\u82b1\u679c\u5c71\u5927\u88571\u53f7'<br>    },<br>    reducers: {<br>        setSchoolName(state, action) {<br>            state.name = action.payload;<br>        },<br>        setSchoolAddress(state, action) {<br>            state.address = action.payload;<br>        }<br>    }<br>});<br><br>const {setSchoolName, setSchoolAddress} = schoolSlice.actions;<br><br>const store = <em>configureStore<\/em>({<br>    reducer: {<br>        stu: stuSlice.reducer,<br>        school: schoolSlice.reducer<br>    }<br>});<br><br>const App = () =&gt; {<br>    const stu = <em>useSelector<\/em>(state =&gt; state.stu);<br>    const school = <em>useSelector<\/em>(state =&gt; state.school);<br>    const dispatch = <em>useDispatch<\/em>();<br>    return &lt;div&gt;<br>        &lt;p&gt;<br>            {stu.name} -- {stu.age} -- {stu.gender} -- {stu.address}<br>        &lt;\/p&gt;<br>        &lt;div&gt;<br>            &lt;button onClick={() =&gt; {<br>                dispatch(setName('\u732a\u516b\u6212'));<br>            }}&gt;\u6539name<br>            &lt;\/button&gt;<br>            &lt;button onClick={() =&gt; {<br>                dispatch(setAge(28));<br>            }}&gt;\u6539age<br>            &lt;\/button&gt;<br>            &lt;button onClick={() =&gt; {<br>                dispatch(setGender('\u5973'));<br>            }}&gt;\u6539gender<br>            &lt;\/button&gt;<br>            &lt;button onClick={() =&gt; {<br>                dispatch(setAddress('\u9ad8\u8001\u5e84'));<br>            }}&gt;\u6539address<br>            &lt;\/button&gt;<br>        &lt;\/div&gt;<br><br>        &lt;hr\/&gt;<br><br>        &lt;p&gt;<br>            {school.name} -- {school.address}<br>        &lt;\/p&gt;<br>        &lt;div&gt;<br>            &lt;button onClick={() =&gt; {<br>                dispatch(setSchoolName('\u9ad8\u8001\u5e84\u4e2d\u5fc3\u5c0f\u5b66'));<br>            }}&gt;\u6539\u5b66\u6821name<br>            &lt;\/button&gt;<br>            &lt;button onClick={() =&gt; {<br>                dispatch(setSchoolAddress('\u9ad8\u8001\u5e84\u4e2d\u5fc3\u5927\u885715\u53f7'));<br>            }}&gt;\u6539\u5b66\u6821address<br>            &lt;\/button&gt;<br>        &lt;\/div&gt;<br>    &lt;\/div&gt;;<br>};<br><br><br>const root = ReactDOM.<em>createRoot<\/em>(document.getElementById('root'));<br>root.render(<br>    &lt;div&gt;<br>        &lt;Provider store={store}&gt;<br>            &lt;App\/&gt;<br>        &lt;\/Provider&gt;<br>    &lt;\/div&gt;<br>);<\/pre>\n\n\n\n<p>\u76ee\u524d\u6211\u4eec\u7684\u4ee3\u7801\u90fd\u662f\u7f16\u5199\u5728\u540c\u4e00\u4e2a\u6587\u4ef6\u4e2d\u7684\uff0c\u771f\u5b9e\u5f00\u53d1\u4e2d\u8fd8\u9700\u8981\u5bf9\u4ee3\u7801\u8fdb\u884c\u62c6\u5206\uff0c\u4e0d\u5199\u4e86\u4f60\u4eec\u81ea\u5df1\u8bd5\u4e00\u8bd5\u5427\uff0c\u5177\u4f53\u5185\u5bb9\u770b\u89c6\u9891\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0a\u8fb9\u7684\u6848\u4f8b\u6211\u4eec\u4e00\u76f4\u5728\u4f7f\u7528Redux\u6838\u5fc3\u5e93\u6765\u4f7f\u7528Redux\uff0c\u9664\u4e86Redux\u6838\u5fc3\u5e93\u5916Redux\u8fd8\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u79cd\u4f7f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6205,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[198],"tags":[202,263,265,264],"_links":{"self":[{"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/posts\/6210"}],"collection":[{"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lilichao.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6210"}],"version-history":[{"count":4,"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/posts\/6210\/revisions"}],"predecessor-version":[{"id":6215,"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/posts\/6210\/revisions\/6215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lilichao.com\/index.php?rest_route=\/wp\/v2\/media\/6205"}],"wp:attachment":[{"href":"https:\/\/lilichao.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lilichao.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lilichao.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}