Deploying to gh-pages from @ ZiuChen/ZiuChen.github.io@7294bbdd21 🚀

This commit is contained in:
ZiuChen
2023-08-09 16:41:26 +00:00
parent 5e1f90a489
commit 354e6a573c
54 changed files with 108 additions and 108 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as s,o as a,c as n,S as l}from"./chunks/framework.04e6e156.js";const o="/assets/the-node.js-system.dd187a1f.jpeg",e="/assets/esmodule-phases.7bb37c77.png",p="/assets/hard-link-and-soft-link.b45d1c8a.jpg",c="/assets/how-pnpm-works.a14a4880.jpg",b=JSON.parse('{"title":"前端工程化","description":"","frontmatter":{},"headers":[],"relativePath":"note/Front-end Engineering.md","filePath":"note/Front-end Engineering.md","lastUpdated":1691598239000}'),r={name:"note/Front-end Engineering.md"},t=l("",254),i=[t];function d(y,D,C,F,u,A){return a(),n("div",null,i)}const h=s(r,[["render",d]]);export{b as __pageData,h as default};
import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const o="/assets/the-node.js-system.dd187a1f.jpeg",e="/assets/esmodule-phases.7bb37c77.png",p="/assets/hard-link-and-soft-link.b45d1c8a.jpg",c="/assets/how-pnpm-works.a14a4880.jpg",b=JSON.parse('{"title":"前端工程化","description":"","frontmatter":{},"headers":[],"relativePath":"note/Front-end Engineering.md","filePath":"note/Front-end Engineering.md","lastUpdated":1691598239000}'),r={name:"note/Front-end Engineering.md"},t=l("",254),i=[t];function d(y,D,C,F,u,A){return n(),a("div",null,i)}const h=s(r,[["render",d]]);export{b as __pageData,h as default};

View File

@@ -1,4 +1,4 @@
import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p="/assets/useLayoutEffect.a5021f93.svg",o="/assets/SSR.7c2917b7.svg",b=JSON.parse('{"title":"React Hooks","description":"","frontmatter":{},"headers":[],"relativePath":"note/React Hooks.md","filePath":"note/React Hooks.md","lastUpdated":1691598239000}'),e={name:"note/React Hooks.md"},t=l(`<h1 id="react-hooks" tabindex="-1">React Hooks <a class="header-anchor" href="#react-hooks" aria-label="Permalink to &quot;React Hooks&quot;"></a></h1><ul><li>认识和体验Hooks</li><li>State/Effect</li><li>Context/Reducer</li><li>Callback/Memo</li><li>Ref/LayoutEffect</li><li>自定义Hooks使用</li></ul><h2 id="认识react-hooks" tabindex="-1">认识React Hooks <a class="header-anchor" href="#认识react-hooks" aria-label="Permalink to &quot;认识React Hooks&quot;"></a></h2><p>Hooks 是 React16.8 推出的新特性</p><p>在没有Hooks时类组件能够完成的大部分工作函数式组件都无法胜任</p><ul><li>类组件可以定义并保存组件内部状态,并在状态发生改变时触发视图重新渲染 <ul><li>函数式组件不行,每次调用函数其中的变量都会被重新初始化,重新渲染时整个函数都重新执行</li></ul></li><li>类组件可以在其内部的生命周期回调中添加副作用 <ul><li>例如<code>componentDidMount</code>在类组件生命周期只会执行一次</li><li>函数式组件没有生命周期,如果在函数体内发起网络请求,那每次重新渲染都会发起请求</li></ul></li></ul><p>类组件存在的问题:</p><ul><li>复杂组件变得难以理解 <ul><li>业务代码相互耦合,类组件变得复杂</li><li>逻辑强耦合在一起难以拆分,强行拆分会导致过度设计,进一步增加代码复杂度</li></ul></li><li>class关键字的理解 <ul><li>初学React时class关键字理解存在困难</li><li>处理<code>this</code>的指向问题需要花费额外的心智负担</li></ul></li><li>组件状态复用 <ul><li>要复用组件需要借助高阶组件</li><li><code>redux</code> 中的 <code>connect</code> 或者 <code>react-router</code> 中的 <code>withRouter</code>,高阶组件的目的就是为了状态复</li><li>或通过Provider、Consumer来共享状态但是Comsumer嵌套问题较严重</li></ul></li></ul><p>Hooks带来的优势</p><ul><li>在不编写class的情况下使用state和其他React特性如生命周期</li><li>Hooks 允许我们在函数式组件中使用状态,并在状态发生改变时让视图重新渲染</li><li>同时,我们还可以在函数式组件中使用生命周期回调</li><li>更多的优点 ...</li></ul><h2 id="计数器案例对比" tabindex="-1">计数器案例对比 <a class="header-anchor" href="#计数器案例对比" aria-label="Permalink to &quot;计数器案例对比&quot;"></a></h2><p>分别使用Hooks和类组件编写一个计数器</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-2J9ra" id="tab-hZOXzFU" checked="checked"><label for="tab-hZOXzFU">CounterClass.jsx</label><input type="radio" name="group-2J9ra" id="tab-DTyn4WO"><label for="tab-DTyn4WO">CounterFunctional.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// CounterClass.jsx</span></span>
import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p="/assets/useLayoutEffect.a5021f93.svg",o="/assets/SSR.7c2917b7.svg",b=JSON.parse('{"title":"React Hooks","description":"","frontmatter":{},"headers":[],"relativePath":"note/React Hooks.md","filePath":"note/React Hooks.md","lastUpdated":1691598239000}'),e={name:"note/React Hooks.md"},t=l(`<h1 id="react-hooks" tabindex="-1">React Hooks <a class="header-anchor" href="#react-hooks" aria-label="Permalink to &quot;React Hooks&quot;"></a></h1><ul><li>认识和体验Hooks</li><li>State/Effect</li><li>Context/Reducer</li><li>Callback/Memo</li><li>Ref/LayoutEffect</li><li>自定义Hooks使用</li></ul><h2 id="认识react-hooks" tabindex="-1">认识React Hooks <a class="header-anchor" href="#认识react-hooks" aria-label="Permalink to &quot;认识React Hooks&quot;"></a></h2><p>Hooks 是 React16.8 推出的新特性</p><p>在没有Hooks时类组件能够完成的大部分工作函数式组件都无法胜任</p><ul><li>类组件可以定义并保存组件内部状态,并在状态发生改变时触发视图重新渲染 <ul><li>函数式组件不行,每次调用函数其中的变量都会被重新初始化,重新渲染时整个函数都重新执行</li></ul></li><li>类组件可以在其内部的生命周期回调中添加副作用 <ul><li>例如<code>componentDidMount</code>在类组件生命周期只会执行一次</li><li>函数式组件没有生命周期,如果在函数体内发起网络请求,那每次重新渲染都会发起请求</li></ul></li></ul><p>类组件存在的问题:</p><ul><li>复杂组件变得难以理解 <ul><li>业务代码相互耦合,类组件变得复杂</li><li>逻辑强耦合在一起难以拆分,强行拆分会导致过度设计,进一步增加代码复杂度</li></ul></li><li>class关键字的理解 <ul><li>初学React时class关键字理解存在困难</li><li>处理<code>this</code>的指向问题需要花费额外的心智负担</li></ul></li><li>组件状态复用 <ul><li>要复用组件需要借助高阶组件</li><li><code>redux</code> 中的 <code>connect</code> 或者 <code>react-router</code> 中的 <code>withRouter</code>,高阶组件的目的就是为了状态复</li><li>或通过Provider、Consumer来共享状态但是Comsumer嵌套问题较严重</li></ul></li></ul><p>Hooks带来的优势</p><ul><li>在不编写class的情况下使用state和其他React特性如生命周期</li><li>Hooks 允许我们在函数式组件中使用状态,并在状态发生改变时让视图重新渲染</li><li>同时,我们还可以在函数式组件中使用生命周期回调</li><li>更多的优点 ...</li></ul><h2 id="计数器案例对比" tabindex="-1">计数器案例对比 <a class="header-anchor" href="#计数器案例对比" aria-label="Permalink to &quot;计数器案例对比&quot;"></a></h2><p>分别使用Hooks和类组件编写一个计数器</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-K9ON_" id="tab-DrrYO-s" checked="checked"><label for="tab-DrrYO-s">CounterClass.jsx</label><input type="radio" name="group-K9ON_" id="tab-UkuQBK9"><label for="tab-UkuQBK9">CounterFunctional.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// CounterClass.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">PureComponent</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">class</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">CounterClass</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">extends</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">PureComponent</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -95,7 +95,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">console</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">log</span><span style="color:#F07178;">(</span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">Effect Cleaned Up</span><span style="color:#89DDFF;">&#39;</span><span style="color:#F07178;">)</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line highlighted"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">},</span><span style="color:#A6ACCD;"> [])</span></span>
<span class="line"><span style="color:#89DDFF;">...</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><h2 id="usecontext" tabindex="-1">useContext <a class="header-anchor" href="#usecontext" aria-label="Permalink to &quot;useContext&quot;"></a></h2><p>使Context</p><ul><li><code>ClassName.contextType = SomeContext</code></li><li><code>this.context.xxx</code></li><li>Context/<code>SomeContext.Consumer</code></li></ul><p>Context使<code>useContext</code></p><p><code>useContext</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-OJdTp" id="tab-JWh1Ctd" checked="checked"><label for="tab-JWh1Ctd">Profile.jsx</label><input type="radio" name="group-OJdTp" id="tab-YH0JBI1"><label for="tab-YH0JBI1">index.js</label><input type="radio" name="group-OJdTp" id="tab-_cYnaDH"><label for="tab-_cYnaDH">App.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// Profile.jsx</span></span>
<span class="line"><span style="color:#89DDFF;">...</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><h2 id="usecontext" tabindex="-1">useContext <a class="header-anchor" href="#usecontext" aria-label="Permalink to &quot;useContext&quot;"></a></h2><p>使Context</p><ul><li><code>ClassName.contextType = SomeContext</code></li><li><code>this.context.xxx</code></li><li>Context/<code>SomeContext.Consumer</code></li></ul><p>Context使<code>useContext</code></p><p><code>useContext</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-ALPHA" id="tab-2E2j3da" checked="checked"><label for="tab-2E2j3da">Profile.jsx</label><input type="radio" name="group-ALPHA" id="tab-gC0BXFU"><label for="tab-gC0BXFU">index.js</label><input type="radio" name="group-ALPHA" id="tab-2ovrpT0"><label for="tab-2ovrpT0">App.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// Profile.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useContext</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">UserContext</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">ThemeContext</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">../context</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
@@ -135,7 +135,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#FFCB6B;">UserContext.Provider</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div></div></div><p><code>SomeContext.Provider</code><code>useContext</code>使</p><h2 id="usereducer" tabindex="-1">useReducer <a class="header-anchor" href="#usereducer" aria-label="Permalink to &quot;useReducer&quot;"></a></h2><p><code>useReducer</code>Redux</p><ul><li><code>useReducer</code><code>useState</code></li><li>state<strong></strong><code>useReducer</code></li><li>statestate使<code>useReducer</code></li></ul><p></p><p><code>useState</code><code>useReducer</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-LGDLD" id="tab-QsrV_Lu" checked="checked"><label for="tab-QsrV_Lu">UserInfoWithReducer.jsx</label><input type="radio" name="group-LGDLD" id="tab-iBKF4NQ"><label for="tab-iBKF4NQ">UserInfo.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// UserInfoWithReducer.jsx</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div></div></div><p><code>SomeContext.Provider</code><code>useContext</code>使</p><h2 id="usereducer" tabindex="-1">useReducer <a class="header-anchor" href="#usereducer" aria-label="Permalink to &quot;useReducer&quot;"></a></h2><p><code>useReducer</code>Redux</p><ul><li><code>useReducer</code><code>useState</code></li><li>state<strong></strong><code>useReducer</code></li><li>statestate使<code>useReducer</code></li></ul><p></p><p><code>useState</code><code>useReducer</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-gDp06" id="tab-a4Yxbrp" checked="checked"><label for="tab-a4Yxbrp">UserInfoWithReducer.jsx</label><input type="radio" name="group-gDp06" id="tab-lOUssrh"><label for="tab-lOUssrh">UserInfo.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// UserInfoWithReducer.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useReducer</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">reducer</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">state</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">action</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -278,7 +278,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> bar1 </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">foo</span><span style="color:#A6ACCD;">()</span></span>
<span class="line"></span>
<span class="line"><span style="color:#82AAFF;">bar1</span><span style="color:#A6ACCD;">() </span><span style="color:#676E95;font-style:italic;">// 1</span></span>
<span class="line"><span style="color:#82AAFF;">bar1</span><span style="color:#A6ACCD;">() </span><span style="color:#676E95;font-style:italic;">// 1</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><p><code>bar1</code><code>count</code></p><p><code>useCallback</code>state使</p><h3 id="usecallback使" tabindex="-1">useCallback使 <a class="header-anchor" href="#usecallback使" aria-label="Permalink to &quot;useCallback使&quot;"></a></h3><p><code>useCallback</code>使<strong></strong></p><p><code>useCallback</code></p><p>/props</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-BiK7B" id="tab-VN3W1H7" checked="checked"><label for="tab-VN3W1H7">InnerCounter.jsx</label><input type="radio" name="group-BiK7B" id="tab-_EaakvI"><label for="tab-_EaakvI">Counter.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// InnerCounter.jsx</span></span>
<span class="line"><span style="color:#82AAFF;">bar1</span><span style="color:#A6ACCD;">() </span><span style="color:#676E95;font-style:italic;">// 1</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><p><code>bar1</code><code>count</code></p><p><code>useCallback</code>state使</p><h3 id="usecallback使" tabindex="-1">useCallback使 <a class="header-anchor" href="#usecallback使" aria-label="Permalink to &quot;useCallback使&quot;"></a></h3><p><code>useCallback</code>使<strong></strong></p><p><code>useCallback</code></p><p>/props</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-wJt99" id="tab-Xaa8_Kt" checked="checked"><label for="tab-Xaa8_Kt">InnerCounter.jsx</label><input type="radio" name="group-wJt99" id="tab-nT7it8_"><label for="tab-nT7it8_">Counter.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// InnerCounter.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">memo</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">memo</span><span style="color:#A6ACCD;">(</span><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">InnerCounter</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">props</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -526,7 +526,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> theme </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">useContext</span><span style="color:#A6ACCD;">(ThemeContext)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">console</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">log</span><span style="color:#A6ACCD;">(user</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">name</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> theme</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">primaryColor) </span><span style="color:#676E95;font-style:italic;">// ...</span></span>
<span class="line"><span style="color:#89DDFF;">...</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p>使HookContext使</p><p>Profile使Hook</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-hOEn-" id="tab-UDcpQMz" checked="checked"><label for="tab-UDcpQMz">useSharedContext.js</label><input type="radio" name="group-hOEn-" id="tab-rqeODuT"><label for="tab-rqeODuT">Profile.js</label></div><div class="blocks"><div class="language-ts active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// useSharedContext.js</span></span>
<span class="line"><span style="color:#89DDFF;">...</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p>使HookContext使</p><p>Profile使Hook</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-YUUSj" id="tab-aOcGHD2" checked="checked"><label for="tab-aOcGHD2">useSharedContext.js</label><input type="radio" name="group-YUUSj" id="tab-HX7Kpds"><label for="tab-HX7Kpds">Profile.js</label></div><div class="blocks"><div class="language-ts active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// useSharedContext.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useContext</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">UserContext</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">ThemeContext</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">../context</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
@@ -550,7 +550,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> &lt;</span><span style="color:#FFCB6B;">div</span><span style="color:#F07178;">&gt;</span><span style="color:#A6ACCD;font-style:italic;">theme</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#FFCB6B;">context</span><span style="color:#89DDFF;">.</span><span style="color:#FFCB6B;">theme</span><span style="color:#89DDFF;">.</span><span style="color:#F07178;">theme</span><span style="color:#89DDFF;">}&lt;</span><span style="color:#F07178;">/</span><span style="color:#FFCB6B;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#A6ACCD;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div></div></div><h3 id="-" tabindex="-1"> <a class="header-anchor" href="#-" aria-label="Permalink to &quot;&quot;"></a></h3><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-CssJ3" id="tab-h2PZZYM" checked="checked"><label for="tab-h2PZZYM">useScrollPosition.js</label><input type="radio" name="group-CssJ3" id="tab-y1Sc10f"><label for="tab-y1Sc10f">GiantList.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// useScrollPosition.js</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div></div></div><h3 id="-" tabindex="-1"> <a class="header-anchor" href="#-" aria-label="Permalink to &quot;&quot;"></a></h3><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-IdQEK" id="tab-RFO65_8" checked="checked"><label for="tab-RFO65_8">useScrollPosition.js</label><input type="radio" name="group-IdQEK" id="tab-eU_EFT8"><label for="tab-eU_EFT8">GiantList.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// useScrollPosition.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useState</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useEffect</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">useScrollPosition</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">options</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{})</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -587,7 +587,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> GiantList</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br></div></div></div></div><h3 id="-localstorage" tabindex="-1">localStorage <a class="header-anchor" href="#-localstorage" aria-label="Permalink to &quot;localStorage&quot;"></a></h3><p>使keylocalStorage</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-pytKk" id="tab-FgEzM4R" checked="checked"><label for="tab-FgEzM4R">useLocalStorage.js</label><input type="radio" name="group-pytKk" id="tab-cRCEFwF"><label for="tab-cRCEFwF">UserInfoStorage.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// useLocalStorage.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> GiantList</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br></div></div></div></div><h3 id="-localstorage" tabindex="-1">localStorage <a class="header-anchor" href="#-localstorage" aria-label="Permalink to &quot;localStorage&quot;"></a></h3><p>使keylocalStorage</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-5-erb" id="tab-cMX__Ve" checked="checked"><label for="tab-cMX__Ve">useLocalStorage.js</label><input type="radio" name="group-5-erb" id="tab--k8hR4F"><label for="tab--k8hR4F">UserInfoStorage.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// useLocalStorage.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useState</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useEffect</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">useLocalStorage</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">key</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -622,7 +622,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> UserInfoStorage</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br></div></div></div></div><p><code>useState</code><code>useState</code></p><h2 id="redux-hooks" tabindex="-1">Redux Hooks <a class="header-anchor" href="#redux-hooks" aria-label="Permalink to &quot;Redux Hooks&quot;"></a></h2><p>ReduxRedux使react-reduxconnect</p><ul><li>使</li><li><code>mapStateToProps</code> <code>mapDispatchToProps</code>props</li></ul><p>Redux7.1Hookconnect</p><h3 id="useselector" tabindex="-1">useSelector <a class="header-anchor" href="#useselector" aria-label="Permalink to &quot;useSelector&quot;"></a></h3><p>state</p><ul><li>state</li><li></li></ul><p><code>useSelector</code>statestate使</p><blockquote><p><code>useSelector</code></p><div class="language-ts line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> refEquality </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">a</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">b</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">=&gt;</span><span style="color:#A6ACCD;"> (a </span><span style="color:#89DDFF;">===</span><span style="color:#A6ACCD;"> b)</span><span style="color:#89DDFF;">;</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p></p></blockquote><h3 id="usedispatch" tabindex="-1">useDispatch <a class="header-anchor" href="#usedispatch" aria-label="Permalink to &quot;useDispatch&quot;"></a></h3><p><code>dispatch</code></p><p><code>useStore</code>store</p><p>Redux使<code>useSelector</code><code>useDispatch</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-e5551" id="tab-zXT0REY" checked="checked"><label for="tab-zXT0REY">[Now] Counter.jsx</label><input type="radio" name="group-e5551" id="tab-1QtbYQN"><label for="tab-1QtbYQN">[Prev] Counter.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// [Now] Counter.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> UserInfoStorage</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br></div></div></div></div><p><code>useState</code><code>useState</code></p><h2 id="redux-hooks" tabindex="-1">Redux Hooks <a class="header-anchor" href="#redux-hooks" aria-label="Permalink to &quot;Redux Hooks&quot;"></a></h2><p>ReduxRedux使react-reduxconnect</p><ul><li>使</li><li><code>mapStateToProps</code> <code>mapDispatchToProps</code>props</li></ul><p>Redux7.1Hookconnect</p><h3 id="useselector" tabindex="-1">useSelector <a class="header-anchor" href="#useselector" aria-label="Permalink to &quot;useSelector&quot;"></a></h3><p>state</p><ul><li>state</li><li></li></ul><p><code>useSelector</code>statestate使</p><blockquote><p><code>useSelector</code></p><div class="language-ts line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> refEquality </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">a</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">b</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">=&gt;</span><span style="color:#A6ACCD;"> (a </span><span style="color:#89DDFF;">===</span><span style="color:#A6ACCD;"> b)</span><span style="color:#89DDFF;">;</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p></p></blockquote><h3 id="usedispatch" tabindex="-1">useDispatch <a class="header-anchor" href="#usedispatch" aria-label="Permalink to &quot;useDispatch&quot;"></a></h3><p><code>dispatch</code></p><p><code>useStore</code>store</p><p>Redux使<code>useSelector</code><code>useDispatch</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-vPtDS" id="tab-khjuGHp" checked="checked"><label for="tab-khjuGHp">[Now] Counter.jsx</label><input type="radio" name="group-vPtDS" id="tab--GnuwkS"><label for="tab--GnuwkS">[Prev] Counter.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// [Now] Counter.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">memo</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useSelector</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useDispatch</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">shallowEqual</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react-redux</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">addCount</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">subCount</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">../store/features/counter</span><span style="color:#89DDFF;">&#39;</span></span>

View File

@@ -38,7 +38,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const A=
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br></div></div><p>path<code>*</code>fallbackNotFound</p><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p><code>Route</code><code>Route</code></p><p><code>Outlet</code>VueRouterrouter-view</p><p>HomeHomeRankingHomeRecommand</p><p>HomeHomeHome使Navigate</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-5Byzf" id="tab-dA5xjQU" checked="checked"><label for="tab-dA5xjQU">App.jsx </label><input type="radio" name="group-5Byzf" id="tab-0OIp5MW"><label for="tab-0OIp5MW">Home.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br></div></div><p>path<code>*</code>fallbackNotFound</p><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p><code>Route</code><code>Route</code></p><p><code>Outlet</code>VueRouterrouter-view</p><p>HomeHomeRankingHomeRecommand</p><p>HomeHomeHome使Navigate</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-QmJJI" id="tab--64_JbJ" checked="checked"><label for="tab--64_JbJ">App.jsx </label><input type="radio" name="group-QmJJI" id="tab-Q8QM-JU"><label for="tab-Q8QM-JU">Home.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">PureComponent</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">Routes</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">Route</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">Navigate</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">NavLink</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react-router-dom</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> Home </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./views/Home</span><span style="color:#89DDFF;">&#39;</span></span>
@@ -73,7 +73,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const A=
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br></div></div></div></div><h2 id="-" tabindex="-1"> <a class="header-anchor" href="#-" aria-label="Permalink to &quot;&quot;"></a></h2><p>使ReactRouter<code>Link</code><code>NavLink</code>使JS</p><p>ReactRouterAPI<code>useNavigate</code></p><p>ReactRouter6APIClassComponentHooks</p><p>Hooks使Hooks</p><p><code>withRouter</code>propsrouter</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-a7XAP" id="tab--1Lxfis" checked="checked"><label for="tab--1Lxfis">withRouter.js</label><input type="radio" name="group-a7XAP" id="tab-kVMIGV0"><label for="tab-kVMIGV0">Home.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// withRouter.js</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br></div></div></div></div><h2 id="-" tabindex="-1"> <a class="header-anchor" href="#-" aria-label="Permalink to &quot;&quot;"></a></h2><p>使ReactRouter<code>Link</code><code>NavLink</code>使JS</p><p>ReactRouterAPI<code>useNavigate</code></p><p>ReactRouter6APIClassComponentHooks</p><p>Hooks使Hooks</p><p><code>withRouter</code>propsrouter</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-SQ74E" id="tab-up2IqF2" checked="checked"><label for="tab-up2IqF2">withRouter.js</label><input type="radio" name="group-SQ74E" id="tab-vCtvhhk"><label for="tab-vCtvhhk">Home.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// withRouter.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useNavigate</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react-router-dom</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">withRouter</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">WrapperComponent</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -100,7 +100,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const A=
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div></div></div><p>使<code>withRouter</code>Home</p><p>使Hooks</p><h2 id="-" tabindex="-1"> <a class="header-anchor" href="#-" aria-label="Permalink to &quot;&quot;"></a></h2><p></p><ul><li></li><li></li></ul><p><strong></strong></p><ul><li><code>/detail/:id</code><code>/detail/123</code> <code>detail/888</code><code>123/888</code>id</li><li><code>/detail/:id</code></li></ul><p>ID访</p><p>HomeRankingDetail</p><p><code>react-router-dom</code>API<code>useParams</code>Hooks<code>withRouter</code></p><ul><li>使<code>withRouter</code><code>this.props.router.params.xxx</code></li><li>使Route<code>path</code><code>:xxx</code><code>/detail/:id</code></li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-g7OXP" id="tab-7nehZMS" checked="checked"><label for="tab-7nehZMS">withRouter.js</label><input type="radio" name="group-g7OXP" id="tab-0GF5cPe"><label for="tab-0GF5cPe">HomeRanking.jsx</label><input type="radio" name="group-g7OXP" id="tab-2CV3BgR"><label for="tab-2CV3BgR">Detail.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// withRouter.js</span></span>
<span class="line"><span style="color:#A6ACCD;">)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div></div></div><p>使<code>withRouter</code>Home</p><p>使Hooks</p><h2 id="-" tabindex="-1"> <a class="header-anchor" href="#-" aria-label="Permalink to &quot;&quot;"></a></h2><p></p><ul><li></li><li></li></ul><p><strong></strong></p><ul><li><code>/detail/:id</code><code>/detail/123</code> <code>detail/888</code><code>123/888</code>id</li><li><code>/detail/:id</code></li></ul><p>ID访</p><p>HomeRankingDetail</p><p><code>react-router-dom</code>API<code>useParams</code>Hooks<code>withRouter</code></p><ul><li>使<code>withRouter</code><code>this.props.router.params.xxx</code></li><li>使Route<code>path</code><code>:xxx</code><code>/detail/:id</code></li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-TFtEQ" id="tab-xAImSpJ" checked="checked"><label for="tab-xAImSpJ">withRouter.js</label><input type="radio" name="group-TFtEQ" id="tab-H_lbtI1"><label for="tab-H_lbtI1">HomeRanking.jsx</label><input type="radio" name="group-TFtEQ" id="tab-eX3XknB"><label for="tab-eX3XknB">Detail.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// withRouter.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useNavigate</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">useParams</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react-router-dom</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">function</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">withRouter</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;font-style:italic;">WrapperComponent</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -165,7 +165,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const A=
<span class="line"><span style="color:#F07178;"> </span><span style="color:#C792EA;">const</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">router</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">=</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">navigate</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">params</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">query</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&lt;</span><span style="color:#FFCB6B;">WrapperComponent</span><span style="color:#89DDFF;"> {...</span><span style="color:#A6ACCD;">props</span><span style="color:#89DDFF;">} </span><span style="color:#C792EA;">router</span><span style="color:#89DDFF;">={</span><span style="color:#A6ACCD;">router</span><span style="color:#89DDFF;">} /&gt;</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p><code>useSearchParams</code>Hooks</p><p></p><p></p><p></p></div><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p><code>App.jsx</code>Routes</p><ul><li>ReactRouter5JS<code>react-router-config</code></li><li>ReactRouter6</li></ul><p>6API<code>useRoutes</code></p><p>Hooks使AppFunctionComponent</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-JHxOs" id="tab-_3RCr8R" checked="checked"><label for="tab-_3RCr8R">index.js</label><input type="radio" name="group-JHxOs" id="tab-JNDwmtE"><label for="tab-JNDwmtE">App.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// router/index.js</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p><code>useSearchParams</code>Hooks</p><p></p><p></p><p></p></div><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p><code>App.jsx</code>Routes</p><ul><li>ReactRouter5JS<code>react-router-config</code></li><li>ReactRouter6</li></ul><p>6API<code>useRoutes</code></p><p>Hooks使AppFunctionComponent</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-Wrk5R" id="tab-5gWiTcY" checked="checked"><label for="tab-5gWiTcY">index.js</label><input type="radio" name="group-Wrk5R" id="tab-Ui_bru6"><label for="tab-Ui_bru6">App.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// router/index.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">Navigate</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react-router-dom</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> Home </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">../views/Home</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> HomeRanking </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">../views/HomeRanking</span><span style="color:#89DDFF;">&#39;</span></span>

View File

@@ -1024,7 +1024,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br></div></div><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;"></a></h2><p></p><ul><li>props 便 props</li><li> React Redux </li><li>线 ...</li></ul><p>ReactAPIContext</p><ul><li>Context props</li><li>使 Context locales</li></ul><h3 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;"></a></h3><p>App Profile UserCardApp <code>isDarkMode</code> UserCard</p><ul><li> <code>createContext</code> </li><li> <code>DarkModeContext.Provider</code> <code>value</code> </li><li>使 <code>UserCard.contextType = DarkModeContext</code> </li><li> <code>this.context</code> </li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-PcKm_" id="tab-BndJmLb" checked="checked"><label for="tab-BndJmLb">context.js</label><input type="radio" name="group-PcKm_" id="tab-o3P_Bjl"><label for="tab-o3P_Bjl">App.jsx</label><input type="radio" name="group-PcKm_" id="tab-aRqKw85"><label for="tab-aRqKw85">UserCard.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// context.js</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br></div></div><h2 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;"></a></h2><p></p><ul><li>props 便 props</li><li> React Redux </li><li>线 ...</li></ul><p>ReactAPIContext</p><ul><li>Context props</li><li>使 Context locales</li></ul><h3 id="context" tabindex="-1">Context <a class="header-anchor" href="#context" aria-label="Permalink to &quot;Context&quot;"></a></h3><p>App Profile UserCardApp <code>isDarkMode</code> UserCard</p><ul><li> <code>createContext</code> </li><li> <code>DarkModeContext.Provider</code> <code>value</code> </li><li>使 <code>UserCard.contextType = DarkModeContext</code> </li><li> <code>this.context</code> </li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-r2iLN" id="tab-Mm4GwmT" checked="checked"><label for="tab-Mm4GwmT">context.js</label><input type="radio" name="group-r2iLN" id="tab-smnQXd2"><label for="tab-smnQXd2">App.jsx</label><input type="radio" name="group-r2iLN" id="tab-NPA7b-R"><label for="tab-NPA7b-R">UserCard.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// context.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">createContext</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> DarkModeContext </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">createContext</span><span style="color:#A6ACCD;">()</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><div class="language-tsx line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>

View File

@@ -1,4 +1,4 @@
import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p="/assets/redux-usage.7df84df8.svg",o="/assets/redux-async-action.0dc40e11.svg",e="/assets/immutable.dc41f87b.gif",d=JSON.parse('{"title":"Redux","description":"","frontmatter":{},"headers":[],"relativePath":"note/Redux.md","filePath":"note/Redux.md","lastUpdated":1691598239000}'),t={name:"note/Redux.md"},c=l(`<h1 id="redux" tabindex="-1">Redux <a class="header-anchor" href="#redux" aria-label="Permalink to &quot;Redux&quot;"></a></h1><h2 id="理解javascript的纯函数" tabindex="-1">理解JavaScript的纯函数 <a class="header-anchor" href="#理解javascript的纯函数" aria-label="Permalink to &quot;理解JavaScript的纯函数&quot;"></a></h2><ul><li>函数式编程中有一个非常重要的概念 <strong>纯函数</strong>JavaScript符合函数式编程的范式所以也有纯函数的概念 <ul><li>在React开发中纯函数被多次提及</li><li>React组件被要求像一个纯函数为什么是像因为还有类组件</li><li>Redux中有一个reducer的概念同样是要求必须是一个纯函数</li></ul></li><li>掌握纯函数对于理解很多框架的设计都是有帮助的</li></ul><p>一个纯函数必然具备以下特征:</p><ul><li>确定的输入一定产生确定的输出</li><li>函数的执行过程中,不能产生副作用</li></ul><h2 id="为什么需要redux" tabindex="-1">为什么需要Redux <a class="header-anchor" href="#为什么需要redux" aria-label="Permalink to &quot;为什么需要Redux&quot;"></a></h2><ul><li>JS需要管理的状态越来越多越来越复杂</li><li>状态不断发生变化之间又相互依赖,这要求视图层也能同步更新</li><li>React提供了自动更新视图的方法但状态仍需要手动管理</li><li>Redux可以帮我们管理状态提供了<strong>可预测的状态管理</strong></li><li>框架无关体积只有2KB大小</li></ul><h2 id="redux的核心理念" tabindex="-1">Redux的核心理念 <a class="header-anchor" href="#redux的核心理念" aria-label="Permalink to &quot;Redux的核心理念&quot;"></a></h2><p>Redux的核心理念 Store</p><ul><li>定义一个统一的规范来操作数据,这样就可以做到对数据的跟踪</li><li><code>list.push()</code> <code>list[0].age = 18</code></li></ul><p>Redux的核心理念 Action</p><ul><li>Redux要求要修改数据必须通过Action来修改</li><li>所有数据的变化必须通过派发PatchAction来更新</li><li>Action是一个普通的JS对象用来描述此次更新的type与content</li><li><code>const action = { type: &#39;ADD_ITEM&#39;, item: { name: &#39;Ziu&#39;, age: 18 } }</code></li></ul><p>Redux的核心理念 Reducer</p><ul><li>如何将Store和Action联系在一起</li><li>reducer是一个纯函数</li><li>完成的工作就是将传入的state和action结合起来生成一个新的state</li><li><code>patch</code> =&gt; <code>reducer</code> =&gt; <code>newState</code> =&gt; <code>Store</code></li></ul><h2 id="redux-demo" tabindex="-1">Redux Demo <a class="header-anchor" href="#redux-demo" aria-label="Permalink to &quot;Redux Demo&quot;"></a></h2><p>下例中,通过<code>createStore</code>创建了一个Store已经不推荐了</p><ul><li>initialState用于在调用<code>createStore</code>时作为默认值传入<code>reducer</code></li><li>后续每次<code>store.dispatch</code>都会调用<code>reducer</code></li><li>通过<code>reducer</code>更新state中的数据</li></ul><p>在React中可以通过<code>store.subscribe</code>注册State变化的监听回调</p><ul><li>当state发生变化时通过调用<code>this.forceUpdate</code>触发组件的更新</li><li>一般情况下,我们在<code>componentDidMount</code>注册监听回调,在<code>componentWillUnmount</code>解除监听</li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-PjX5N" id="tab-4wOHpLh" checked="checked"><label for="tab-4wOHpLh">App.jsx</label><input type="radio" name="group-PjX5N" id="tab-enHqx0X"><label for="tab-enHqx0X">index.js</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>
import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p="/assets/redux-usage.7df84df8.svg",o="/assets/redux-async-action.0dc40e11.svg",e="/assets/immutable.dc41f87b.gif",d=JSON.parse('{"title":"Redux","description":"","frontmatter":{},"headers":[],"relativePath":"note/Redux.md","filePath":"note/Redux.md","lastUpdated":1691598239000}'),t={name:"note/Redux.md"},c=l(`<h1 id="redux" tabindex="-1">Redux <a class="header-anchor" href="#redux" aria-label="Permalink to &quot;Redux&quot;"></a></h1><h2 id="理解javascript的纯函数" tabindex="-1">理解JavaScript的纯函数 <a class="header-anchor" href="#理解javascript的纯函数" aria-label="Permalink to &quot;理解JavaScript的纯函数&quot;"></a></h2><ul><li>函数式编程中有一个非常重要的概念 <strong>纯函数</strong>JavaScript符合函数式编程的范式所以也有纯函数的概念 <ul><li>在React开发中纯函数被多次提及</li><li>React组件被要求像一个纯函数为什么是像因为还有类组件</li><li>Redux中有一个reducer的概念同样是要求必须是一个纯函数</li></ul></li><li>掌握纯函数对于理解很多框架的设计都是有帮助的</li></ul><p>一个纯函数必然具备以下特征:</p><ul><li>确定的输入一定产生确定的输出</li><li>函数的执行过程中,不能产生副作用</li></ul><h2 id="为什么需要redux" tabindex="-1">为什么需要Redux <a class="header-anchor" href="#为什么需要redux" aria-label="Permalink to &quot;为什么需要Redux&quot;"></a></h2><ul><li>JS需要管理的状态越来越多越来越复杂</li><li>状态不断发生变化之间又相互依赖,这要求视图层也能同步更新</li><li>React提供了自动更新视图的方法但状态仍需要手动管理</li><li>Redux可以帮我们管理状态提供了<strong>可预测的状态管理</strong></li><li>框架无关体积只有2KB大小</li></ul><h2 id="redux的核心理念" tabindex="-1">Redux的核心理念 <a class="header-anchor" href="#redux的核心理念" aria-label="Permalink to &quot;Redux的核心理念&quot;"></a></h2><p>Redux的核心理念 Store</p><ul><li>定义一个统一的规范来操作数据,这样就可以做到对数据的跟踪</li><li><code>list.push()</code> <code>list[0].age = 18</code></li></ul><p>Redux的核心理念 Action</p><ul><li>Redux要求要修改数据必须通过Action来修改</li><li>所有数据的变化必须通过派发PatchAction来更新</li><li>Action是一个普通的JS对象用来描述此次更新的type与content</li><li><code>const action = { type: &#39;ADD_ITEM&#39;, item: { name: &#39;Ziu&#39;, age: 18 } }</code></li></ul><p>Redux的核心理念 Reducer</p><ul><li>如何将Store和Action联系在一起</li><li>reducer是一个纯函数</li><li>完成的工作就是将传入的state和action结合起来生成一个新的state</li><li><code>patch</code> =&gt; <code>reducer</code> =&gt; <code>newState</code> =&gt; <code>Store</code></li></ul><h2 id="redux-demo" tabindex="-1">Redux Demo <a class="header-anchor" href="#redux-demo" aria-label="Permalink to &quot;Redux Demo&quot;"></a></h2><p>下例中,通过<code>createStore</code>创建了一个Store已经不推荐了</p><ul><li>initialState用于在调用<code>createStore</code>时作为默认值传入<code>reducer</code></li><li>后续每次<code>store.dispatch</code>都会调用<code>reducer</code></li><li>通过<code>reducer</code>更新state中的数据</li></ul><p>在React中可以通过<code>store.subscribe</code>注册State变化的监听回调</p><ul><li>当state发生变化时通过调用<code>this.forceUpdate</code>触发组件的更新</li><li>一般情况下,我们在<code>componentDidMount</code>注册监听回调,在<code>componentWillUnmount</code>解除监听</li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-6oEDR" id="tab-aZ9W-Ba" checked="checked"><label for="tab-aZ9W-Ba">App.jsx</label><input type="radio" name="group-6oEDR" id="tab-XrBO3rt"><label for="tab-XrBO3rt">index.js</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">PureComponent</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> store </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./store</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
@@ -71,7 +71,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"></span>
<span class="line"><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> store </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">createStore</span><span style="color:#A6ACCD;">(reducer)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> store</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br></div></div></div></div><p><img src="`+p+`" alt="redux-usage"></p><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p></p><ul><li><code>reducer</code><code>reducer.js</code><code>store/index.js</code></li><li><code>action.type</code><code>constants.js</code>使</li><li><code>action</code><code>actionFactory.js</code>dispatch</li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-A5fGu" id="tab-7K6ukiE" checked="checked"><label for="tab-7K6ukiE">index.js</label><input type="radio" name="group-A5fGu" id="tab-lEvNpQz"><label for="tab-lEvNpQz">constants.js</label><input type="radio" name="group-A5fGu" id="tab-PIeQelz"><label for="tab-PIeQelz">reducer.js</label><input type="radio" name="group-A5fGu" id="tab-cHuI1ux"><label for="tab-cHuI1ux">actionFactory.js</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/index.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">default</span><span style="color:#A6ACCD;"> store</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br></div></div></div></div><p><img src="`+p+`" alt="redux-usage"></p><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p></p><ul><li><code>reducer</code><code>reducer.js</code><code>store/index.js</code></li><li><code>action.type</code><code>constants.js</code>使</li><li><code>action</code><code>actionFactory.js</code>dispatch</li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-hi1bO" id="tab-y08n7LQ" checked="checked"><label for="tab-y08n7LQ">index.js</label><input type="radio" name="group-hi1bO" id="tab-quN8hYG"><label for="tab-quN8hYG">constants.js</label><input type="radio" name="group-hi1bO" id="tab-R6YjPGz"><label for="tab-R6YjPGz">reducer.js</label><input type="radio" name="group-hi1bO" id="tab-Mwp4Bea"><label for="tab-Mwp4Bea">actionFactory.js</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/index.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">createStore</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">redux</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> reducer </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./reducer</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
@@ -146,7 +146,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br></div></div><h2 id="redux" tabindex="-1">Redux <a class="header-anchor" href="#redux" aria-label="Permalink to &quot;Redux&quot;"></a></h2><p></p><ul><li>Object Tree</li><li>Object TreeStore</li><li>ReduxStore</li><li></li></ul><p>State</p><ul><li>Statepatch actionState</li><li>ViewState</li><li>race condition</li></ul><p>使</p><ul><li>reducerStateState<strong>State</strong></li><li>reducerreducerState Tree</li><li>reducer</li></ul><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p>ReactRedux</p><p>Redux/store</p><p>使</p><p>Redux<code>react-redux</code>便React使Redux</p><div class="language-bash line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">react-redux</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>Profile<code>connect</code></p><p>store<code>mapStoreToProps</code>props使storeconnect</p><p><code>Profile</code>propsstore</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-p8Ki7" id="tab-xwi3rs4" checked="checked"><label for="tab-xwi3rs4">App.jsx</label><input type="radio" name="group-p8Ki7" id="tab-tw7RTli"><label for="tab-tw7RTli">Profile.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br></div></div><h2 id="redux" tabindex="-1">Redux <a class="header-anchor" href="#redux" aria-label="Permalink to &quot;Redux&quot;"></a></h2><p></p><ul><li>Object Tree</li><li>Object TreeStore</li><li>ReduxStore</li><li></li></ul><p>State</p><ul><li>Statepatch actionState</li><li>ViewState</li><li>race condition</li></ul><p>使</p><ul><li>reducerStateState<strong>State</strong></li><li>reducerreducerState Tree</li><li>reducer</li></ul><h2 id="" tabindex="-1"> <a class="header-anchor" href="#" aria-label="Permalink to &quot;&quot;"></a></h2><p>ReactRedux</p><p>Redux/store</p><p>使</p><p>Redux<code>react-redux</code>便React使Redux</p><div class="language-bash line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">react-redux</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>Profile<code>connect</code></p><p>store<code>mapStoreToProps</code>props使storeconnect</p><p><code>Profile</code>propsstore</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-QMwyZ" id="tab-T0BPvAb" checked="checked"><label for="tab-T0BPvAb">App.jsx</label><input type="radio" name="group-QMwyZ" id="tab-7NyIud6"><label for="tab-7NyIud6">Profile.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// App.jsx</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> React</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">PureComponent</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">Provider</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react-redux</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> store </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./store</span><span style="color:#89DDFF;">&#39;</span></span>
@@ -216,7 +216,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br></div></div><p><code>connect</code></p><ul><li><code>connect</code><strong></strong><strong></strong></li><li></li><li>propsStore/dispatch</li></ul><h2 id="action" tabindex="-1">Action <a class="header-anchor" href="#action" aria-label="Permalink to &quot;Action&quot;"></a></h2><p>Storeaction</p><p>dispatchActiondispatch</p><p><code>redux-thunk</code>Reduxdispatch</p><div class="language-bash line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">redux-thunk</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><code>applyMiddleware</code><code>redux-thunk</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-aH2wG" id="tab-Uq3u7ys" checked="checked"><label for="tab-Uq3u7ys">index.js</label><input type="radio" name="group-aH2wG" id="tab-Na_ZStx"><label for="tab-Na_ZStx">actionFactory.js</label><input type="radio" name="group-aH2wG" id="tab-DkRsNJI"><label for="tab-DkRsNJI">list.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight has-highlighted-lines"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/index.js</span></span>
<span class="line"><span style="color:#A6ACCD;">)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br></div></div><p><code>connect</code></p><ul><li><code>connect</code><strong></strong><strong></strong></li><li></li><li>propsStore/dispatch</li></ul><h2 id="action" tabindex="-1">Action <a class="header-anchor" href="#action" aria-label="Permalink to &quot;Action&quot;"></a></h2><p>Storeaction</p><p>dispatchActiondispatch</p><p><code>redux-thunk</code>Reduxdispatch</p><div class="language-bash line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">redux-thunk</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><code>applyMiddleware</code><code>redux-thunk</code></p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-ddbJ2" id="tab-H5BksQB" checked="checked"><label for="tab-H5BksQB">index.js</label><input type="radio" name="group-ddbJ2" id="tab-NYTFpxp"><label for="tab-NYTFpxp">actionFactory.js</label><input type="radio" name="group-ddbJ2" id="tab-3PjV3-Z"><label for="tab-3PjV3-Z">list.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight has-highlighted-lines"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/index.js</span></span>
<span class="line highlighted"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">createStore</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">applyMiddleware</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">redux</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line highlighted"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> thunk </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">redux-thunk</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> reducer </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./reducer</span><span style="color:#89DDFF;">&#39;</span></span>
@@ -316,7 +316,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> counter</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#82AAFF;">counterReducer</span><span style="color:#F07178;">(</span><span style="color:#A6ACCD;">state</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">counter</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">action</span><span style="color:#F07178;">)</span><span style="color:#89DDFF;">,</span></span>
<span class="line"><span style="color:#F07178;"> postList</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#82AAFF;">postListReducer</span><span style="color:#F07178;">(</span><span style="color:#A6ACCD;">state</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">postList</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">action</span><span style="color:#F07178;">)</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br></div></div><h2 id="reduxtoolkit" tabindex="-1">ReduxToolkit <a class="header-anchor" href="#reduxtoolkit" aria-label="Permalink to &quot;ReduxToolkit&quot;"></a></h2><ul><li>ReduxToolkit</li><li>ReduxToolkit</li><li>connect</li><li></li><li>React</li></ul><h2 id="reduxtoolkit" tabindex="-1">ReduxToolkit <a class="header-anchor" href="#reduxtoolkit" aria-label="Permalink to &quot;ReduxToolkit&quot;"></a></h2><p>使<code>createStore</code>Storedeprecated使<code>@reduxjs/toolkit</code><code>configureStore</code></p><p>Redux ToolkitRedux</p><ul><li>ReduxRedux</li><li></li><li>Redux ToolkitRedux</li><li>RTK</li></ul><h2 id="使reduxtoolkitstore" tabindex="-1">使ReduxToolkitStore <a class="header-anchor" href="#使reduxtoolkitstore" aria-label="Permalink to &quot;使ReduxToolkitStore&quot;"></a></h2><p>Redux Toolkitreact-redux</p><div class="language-bash line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">@reduxjs/toolkit</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">react-redux</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>Redux ToolkitAPI</p><ul><li><code>configureStore</code> createStore <ul><li>slice reducer Redux</li><li>redux-thunkRedux DevTools Extension</li></ul></li><li><code>createSlice</code> <ul><li>reducerreduceractions</li></ul></li><li><code>createAsyncThunk</code><ul><li>Promise</li><li><code>pending / fullfilled / rejected</code>thunk</li></ul></li></ul><p>Demo</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-GQT8-" id="tab-6jomcjc" checked="checked"><label for="tab-6jomcjc">index.js</label><input type="radio" name="group-GQT8-" id="tab-pYJi-HJ"><label for="tab-pYJi-HJ">counter.js</label><input type="radio" name="group-GQT8-" id="tab-djXvw2Z"><label for="tab-djXvw2Z">Counter.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/index.js</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br></div></div><h2 id="reduxtoolkit" tabindex="-1">ReduxToolkit <a class="header-anchor" href="#reduxtoolkit" aria-label="Permalink to &quot;ReduxToolkit&quot;"></a></h2><ul><li>ReduxToolkit</li><li>ReduxToolkit</li><li>connect</li><li></li><li>React</li></ul><h2 id="reduxtoolkit" tabindex="-1">ReduxToolkit <a class="header-anchor" href="#reduxtoolkit" aria-label="Permalink to &quot;ReduxToolkit&quot;"></a></h2><p>使<code>createStore</code>Storedeprecated使<code>@reduxjs/toolkit</code><code>configureStore</code></p><p>Redux ToolkitRedux</p><ul><li>ReduxRedux</li><li></li><li>Redux ToolkitRedux</li><li>RTK</li></ul><h2 id="使reduxtoolkitstore" tabindex="-1">使ReduxToolkitStore <a class="header-anchor" href="#使reduxtoolkitstore" aria-label="Permalink to &quot;使ReduxToolkitStore&quot;"></a></h2><p>Redux Toolkitreact-redux</p><div class="language-bash line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">@reduxjs/toolkit</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">react-redux</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>Redux ToolkitAPI</p><ul><li><code>configureStore</code> createStore <ul><li>slice reducer Redux</li><li>redux-thunkRedux DevTools Extension</li></ul></li><li><code>createSlice</code> <ul><li>reducerreduceractions</li></ul></li><li><code>createAsyncThunk</code><ul><li>Promise</li><li><code>pending / fullfilled / rejected</code>thunk</li></ul></li></ul><p>Demo</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-Pll7e" id="tab-HSXPOFj" checked="checked"><label for="tab-HSXPOFj">index.js</label><input type="radio" name="group-Pll7e" id="tab-AU51c5C"><label for="tab-AU51c5C">counter.js</label><input type="radio" name="group-Pll7e" id="tab-IRE9ipB"><label for="tab-IRE9ipB">Counter.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/index.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">configureStore</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">@reduxjs/toolkit</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> counterSlice </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./features/counter</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
@@ -388,7 +388,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> )</span></span>
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br></div></div></div></div><p><code>createSlice</code> </p><ul><li><code>name</code> Slice dev-tool</li><li><code>initialState</code> </li><li><code>reducers</code> reducer</li><li>: actions</li></ul><p><code>configureStore</code> </p><ul><li><code>reducer</code> slicereducer</li><li><code>middleware</code> <ul><li>RTK<code>redux-thunk</code><code>redux-devtool</code></li></ul></li><li><code>devTools</code> </li></ul><h2 id="使rtkdispatch" tabindex="-1">使RTKdispatch <a class="header-anchor" href="#使rtkdispatch" aria-label="Permalink to &quot;使RTKdispatch&quot;"></a></h2><p>Store</p><p><code>redux-thunk</code>dispatch</p><p>ReduxToolkitThunk<code>createAsyncThunk</code></p><p>使RTKProfilepostListStore</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-PpylD" id="tab-m5bZYuN" checked="checked"><label for="tab-m5bZYuN">postList.js</label><input type="radio" name="group-PpylD" id="tab-2VUudjC"><label for="tab-2VUudjC">index.js</label><input type="radio" name="group-PpylD" id="tab-opE8JM6"><label for="tab-opE8JM6">Profile.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight has-highlighted-lines"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/features/postList.js</span></span>
<span class="line"><span style="color:#A6ACCD;">)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br></div></div></div></div><p><code>createSlice</code> </p><ul><li><code>name</code> Slice dev-tool</li><li><code>initialState</code> </li><li><code>reducers</code> reducer</li><li>: actions</li></ul><p><code>configureStore</code> </p><ul><li><code>reducer</code> slicereducer</li><li><code>middleware</code> <ul><li>RTK<code>redux-thunk</code><code>redux-devtool</code></li></ul></li><li><code>devTools</code> </li></ul><h2 id="使rtkdispatch" tabindex="-1">使RTKdispatch <a class="header-anchor" href="#使rtkdispatch" aria-label="Permalink to &quot;使RTKdispatch&quot;"></a></h2><p>Store</p><p><code>redux-thunk</code>dispatch</p><p>ReduxToolkitThunk<code>createAsyncThunk</code></p><p>使RTKProfilepostListStore</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-ZkY-9" id="tab-NbVzvC-" checked="checked"><label for="tab-NbVzvC-">postList.js</label><input type="radio" name="group-ZkY-9" id="tab-xHzylxl"><label for="tab-xHzylxl">index.js</label><input type="radio" name="group-ZkY-9" id="tab-lXF59fr"><label for="tab-lXF59fr">Profile.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight has-highlighted-lines"><code><span class="line"><span style="color:#676E95;font-style:italic;">// store/features/postList.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">createSlice</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">createAsyncThunk</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">@reduxjs/toolkit</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>
<span class="line highlighted"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> fetchPostList </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">createAsyncThunk</span><span style="color:#A6ACCD;">(</span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">fetch/postList</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">async</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">=&gt;</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
@@ -556,7 +556,7 @@ import{_ as s,o as n,c as a,S as l}from"./chunks/framework.04e6e156.js";const p=
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&lt;</span><span style="color:#FFCB6B;">WrapperComponent</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{...</span><span style="color:#FFCB6B;">this</span><span style="color:#89DDFF;">.</span><span style="color:#FFCB6B;">props</span><span style="color:#89DDFF;">}</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{...</span><span style="color:#FFCB6B;">state</span><span style="color:#89DDFF;">}</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{...</span><span style="color:#FFCB6B;">dispatch</span><span style="color:#89DDFF;">}</span><span style="color:#F07178;"> /</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"><span style="color:#F07178;"> }</span></span>
<span class="line"><span style="color:#F07178;"> }</span></span>
<span class="line"><span style="color:#F07178;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br></div></div><p>store.statesetStateReact</p><p>stateReactre-renderre-render</p><p></p><ul><li> <ul><li><code>store.subscribe</code><code>unsubscribe</code> </li></ul></li><li>store <ul><li>store contextstore</li><li>context Provider使</li><li><code>react-redux</code>使connectAppProviderstore</li></ul></li></ul><p>connect</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-ymwl5" id="tab-GxOh-_0" checked="checked"><label for="tab-GxOh-_0">connect.js</label><input type="radio" name="group-ymwl5" id="tab-o1TtPbz"><label for="tab-o1TtPbz">storeContext.js</label><input type="radio" name="group-ymwl5" id="tab-pzi5XLD"><label for="tab-pzi5XLD">App.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// connect.js</span></span>
<span class="line"><span style="color:#F07178;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br></div></div><p>store.statesetStateReact</p><p>stateReactre-renderre-render</p><p></p><ul><li> <ul><li><code>store.subscribe</code><code>unsubscribe</code> </li></ul></li><li>store <ul><li>store contextstore</li><li>context Provider使</li><li><code>react-redux</code>使connectAppProviderstore</li></ul></li></ul><p>connect</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-soxuU" id="tab-NCtF1U-" checked="checked"><label for="tab-NCtF1U-">connect.js</label><input type="radio" name="group-soxuU" id="tab-U1dHnZs"><label for="tab-U1dHnZs">storeContext.js</label><input type="radio" name="group-soxuU" id="tab--LXeVHM"><label for="tab--LXeVHM">App.jsx</label></div><div class="blocks"><div class="language-tsx active line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">tsx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">// connect.js</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">PureComponent</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">react</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"><span style="color:#89DDFF;font-style:italic;">import</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">StoreContext</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">from</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">./storeContext</span><span style="color:#89DDFF;">&#39;</span></span>
<span class="line"></span>

View File

@@ -1 +1 @@
{"article_深入vue3源码看看vue.use后究竟发生了什么.md":"acdc089e","index.md":"86ae0e97","article_深入javascript数据类型.md":"0ec1315b","article_【用友金融】前端面试题总结.md":"41ec0540","article_深入理解proxy与reflect.md":"c7296246","article_【快手】深入理解前端面试题.md":"b4dd25f0","note_mysql.md":"0cd9cc6a","article_深入理解浏览器缓存机制.md":"06b54fd1","article_深入理解浏览器运行原理.md":"278714ea","note_ssr.md":"2d68a1c1","article_一文读懂事件冒泡与事件捕获.md":"d660d1d2","article_一文读懂函数中this指向问题.md":"82ad79e7","article_从0实现一个年度报告.md":"b90d1096","article_彻底搞懂对象的数据属性描述符、存储属性描述符.md":"4008b4f8","article_浅析defineproperty与proxy实现的双向绑定.md":"c7dc82d9","note_react router.md":"80d05747","project_clipboardmanager_guide_index.md":"2ea74122","project_clipboardmanager_index.md":"f93a8236","project_clipboardmanager_log_index.md":"8c04f8e2","project_clipboardmanager_statement_index.md":"25f6e4fe","project_clipboardmanager_vip_index.md":"c8519ac4","project_jsrunner_index.md":"ec6b75fb","project_jsrunner_log_index.md":"40a35379","project_markdown_index.md":"9be7e873","project_markdown_log_index.md":"48e0c8ec","project_markdown_shortcut_index.md":"428f3081","project_smartwordbreak_index.md":"3c19c09c","project_smartwordbreak_log_index.md":"07f32dc0","project_smartwordbreak_statement_index.md":"a2ae9300","self_index.md":"2d91844b","works_contribution.md":"e7e35640","works_opensource.md":"7c47dc92","article_【2023】青训营 - 前端练习题汇总解析.md":"189eb39d","note_react hooks.md":"2e138c33","note_css.md":"6bd77aac","article_一文读懂伪类与伪元素.md":"38ae0f3a","note_javascriptenhanced.md":"8589bda3","note_redux.md":"d0a546a1","note_javascript.md":"78a9a50c","note_front-end engineering.md":"2f3633d1","article_【字节跳动】前端面试题总结.md":"575e8a98","note_react.md":"ab251982"}
{"article_彻底搞懂对象的数据属性描述符、存储属性描述符.md":"4008b4f8","article_【2023】青训营 - 前端练习题汇总解析.md":"189eb39d","article_一文读懂函数中this指向问题.md":"82ad79e7","article_从0实现一个年度报告.md":"b90d1096","article_【字节跳动】前端面试题总结.md":"575e8a98","project_jsrunner_log_index.md":"40a35379","project_markdown_index.md":"9be7e873","project_markdown_log_index.md":"48e0c8ec","project_markdown_shortcut_index.md":"428f3081","project_smartwordbreak_index.md":"3c19c09c","project_smartwordbreak_log_index.md":"07f32dc0","project_smartwordbreak_statement_index.md":"a2ae9300","self_index.md":"2d91844b","works_contribution.md":"e7e35640","works_opensource.md":"7c47dc92","article_【快手】深入理解前端面试题.md":"b4dd25f0","article_【用友金融】前端面试题总结.md":"41ec0540","note_javascript.md":"78a9a50c","project_jsrunner_index.md":"ec6b75fb","article_浅析defineproperty与proxy实现的双向绑定.md":"c7dc82d9","article_深入javascript数据类型.md":"0ec1315b","article_深入vue3源码看看vue.use后究竟发生了什么.md":"acdc089e","article_深入理解浏览器运行原理.md":"278714ea","index.md":"86ae0e97","article_深入理解浏览器缓存机制.md":"06b54fd1","note_mysql.md":"0cd9cc6a","note_react hooks.md":"d857d076","note_redux.md":"1457f290","note_ssr.md":"2d68a1c1","article_深入理解proxy与reflect.md":"c7296246","project_clipboardmanager_guide_index.md":"2ea74122","project_clipboardmanager_index.md":"f93a8236","project_clipboardmanager_log_index.md":"8c04f8e2","project_clipboardmanager_statement_index.md":"25f6e4fe","project_clipboardmanager_vip_index.md":"c8519ac4","note_react router.md":"b8a56849","article_一文读懂事件冒泡与事件捕获.md":"d660d1d2","note_front-end engineering.md":"3b482009","note_css.md":"6bd77aac","article_一文读懂伪类与伪元素.md":"38ae0f3a","note_react.md":"de4b451f","note_javascriptenhanced.md":"8589bda3"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long