《React基础》React-Redux
<div id="output_wrapper_id" class="output_wrapper" style="font-size: 15px; color: rgba(62, 62, 62, 1); line-height: 1.8; word-spacing: 2px; letter-spacing: 2px; font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%); background-size: 20px 20px; background-position: center"><blockquote style="line-height: inherit; display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0; color: rgba(0, 0, 0, 1); border-left: 5px solid rgba(239, 112, 96, 1); background: rgba(239, 235, 233, 1); overflow: auto; overflow-wrap: normal; word-break: normal">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 0">作者:<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">水涛</strong><br>追求技术,但又不失生活的乐趣,过自己想要的生活</p>
</blockquote>
<h3 id="hreactredux" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">React-Redux简介</span></h3>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 1.7em 0">React-Redux可以使你的React项目拥有<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">全局数据</strong>,可以使多个React组件读取到全局数据并且组件中也可修改它。</p>
</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 1.7em 0">React-Redux你可以理解为Vue中的Vuex,也是一种全局状态(不懂Vue的这条略过)。</p>
</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 1.7em 0">React-Redux由<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">store</strong>、<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">action构建函数</strong>、<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">reducer</strong>组成。store负责维护全局状态,action构建函数负责创建action对象,reducer处理action对象并更新store。</p>
</li>
</ul>
<h3 id="hreactredux-1" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">React-Redux安装</span></h3>
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 1.7em 0">打开vscode终端中输入:<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">npm install --save--dev react-redux redux</code> 回车即可下载安装<br>本文中的ReactRedux版本信息如下<br><strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">React-Redux版本为:7.1.3</strong><br><strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">Redux版本为:4.0.4</strong></p>
<h3 id="h" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">概念铺垫</span></h3>
<h4 id="hreact" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; font-size: 1.2em"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">React中的组件分为两种:</span></h4>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">显示组件:<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">只显示</strong>数据,<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">没有</strong>业务逻辑。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">容器组件:<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">有state</strong>状态,<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">有</strong>业务逻辑。</li>
</ul>
<h4 id="h-1" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; font-size: 1.2em"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">显示组件示例:</span></h4>
<pre><code class="javascript language-javascript hljs" style="overflow-wrap: break-word; margin: 0 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0; letter-spacing: 0; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0; overflow-x: auto; padding: 0.5em; background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important"><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">Show</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">props</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> (<br> <span class="xml" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span>姓名:{props.name}<span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span>性别:{props.sex}<span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span></span><br> );<br>}<br></code></pre>
<h4 id="h-2" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; font-size: 1.2em"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">容器组件示例:</span></h4>
<pre><code class="javascript language-javascript hljs" style="overflow-wrap: break-word; margin: 0 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0; letter-spacing: 0; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0; overflow-x: auto; padding: 0.5em; background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important"><span class="hljs-class" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">class</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">ShowContainer</span> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">extends</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">Component</span></span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">constructor</span>(props)<br> {<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">super</span>(props);<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">this</span>.state={<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"微差"</span>,<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"男"</span><br> };<br> }<br><br> render()<br> {<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">let</span> {name,sex} = <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">this</span>.state;<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> <span class="xml" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Show</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">{name}</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">{sex}/</span>></span>;<br> }<br>}<br></span></code></pre>
<blockquote style="line-height: inherit; display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0; color: rgba(0, 0, 0, 1); border-left: 5px solid rgba(239, 112, 96, 1); background: rgba(239, 235, 233, 1); overflow: auto; overflow-wrap: normal; word-break: normal">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 0">可以看到<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">容器组件</strong>中渲染的是<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">显示组件</strong>,显示组件的一切<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">数据来源于容器组件</strong></p>
</blockquote>
<h3 id="h-3" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">创建容器组件</span></h3>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">引入<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">React-Redux</code>中的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">connect</code>函数,用它创建容器组件</li>
</ul>
<h4 id="h-4" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; font-size: 1.2em"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">创建容器组件代码如下</span></h4>
<pre><code class="javascript language-javascript hljs" style="overflow-wrap: break-word; margin: 0 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0; letter-spacing: 0; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0; overflow-x: auto; padding: 0.5em; background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important"><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*引入connect函数*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {connect} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"react-redux"</span>;<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*声明Show组件*/</span><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">Show</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">props</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> (<br> <span class="xml" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span>姓名:{props.name}<span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span>性别:{props.sex}<span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span></span><br> );<br>}<br><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">mapStateToProps</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">state</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">if</span> (<span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">typeof</span> state == <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"undefined"</span>) <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> { <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>: <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span>, <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>: <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span> };<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>:state.name,<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>:state.sex<br> };<br>}<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*action构造函数*/</span><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">onChangeName</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">data</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">type</span>:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"NAME"</span>,<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">data</span>:data<br> };<br>}<br><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">mapDispatchToProps</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">dispatch</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span>{<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">onChangeName</span>:<span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">data</span>)=></span>{dispatch(onChangeName(data));}<br> };<br>}<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*创建容器组件*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">let</span> Container = connect(mapStateToProps,mapDispatchToProps)(Show);<br></code></pre>
<h4 id="h-5" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; font-size: 1.2em"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">代码解析:</span></h4>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">从<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">React-Redux</code>中引入<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">connect</code>函数。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">声明函数<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">组件</strong><code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Show</code>——用于展示数据。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">编写<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapStateToProps</code>函数:参数是容器组件的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">state</code>对象,用于将<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">容器组件(在例子中是Container)</strong>的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">state</code>对象值映射到对应<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">显示组件(在例子中是Show组件)</strong>的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">props</code>属性上,因此后续<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Show</code>组件可以通过<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">props.name</code>直接获取到容器组件的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">state.name</code>。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">编写<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">onChangeName</code>函数:创建<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">action</code>对象,<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">action</code>对象中<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">必须存在</strong><code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">type</code>属性,否则报错。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">编写<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapDispatchToProps</code>函数:函数的第一个参数是<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">dispatch</code>函数,<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapDispatchToProps</code>函数返回一个对象,对象的每一个属性都是一个函数,函数最终调用了<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">dispatch</code>方法,<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">dispatch</code>方法中传入<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">action</code>对象,当调用<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">dispatch</code>时会触发<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>中的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">reducer</code>函数,对<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>进行更新。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">调用<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">connect</code>生成容器组件:使用<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">connect</code>函数,传入<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapStateToProps</code>与<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapDispatchToProps</code>函数作为参数,此时会返回一个函数,继续将<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Show</code>组件传入,最终<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">生成</strong>了一个<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Show</code>组件的<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">容器组件</strong>,此时,这个容器组件的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">state</code>将会按照<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapStateToProps</code>函数的映射方式与<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Show</code>组件的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">props</code>进行一一对应,并且<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">props</code>中拥有<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapDispatchToProps</code>中映射的函数,可以在<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Show</code>组件中调用以更新<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>,容器组件就像我开头铺垫的一样,在页面使用容器组件,实际渲染的是显示组件。</li>
</ul>
<blockquote style="line-height: inherit; display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0; color: rgba(0, 0, 0, 1); border-left: 5px solid rgba(239, 112, 96, 1); background: rgba(239, 235, 233, 1); overflow: auto; overflow-wrap: normal; word-break: normal">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 0">到这一步,我们已经生成了容器组件,并且能够在显示组件中显示容器组件的state数据,并且能够修改store。那么问题来了,容器组件的state用什么设置呢?怎么创建store啊?下面,666了。</p>
</blockquote>
<h3 id="hstore" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">创建store</span></h3>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">引入<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">redux</code>中的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">createStore</code>函数,通过它创建<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code></li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0"><code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">createStore</code>需要一个函数作为参数,这个参数就是<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">reducer</strong>,<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">reducer</strong>就是一个函数</li>
</ul>
<h4 id="hstore-1" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; font-size: 1.2em"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">创建store对象代码如下:</span></h4>
<pre><code class="javascript language-javascript hljs" style="overflow-wrap: break-word; margin: 0 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0; letter-spacing: 0; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0; overflow-x: auto; padding: 0.5em; background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important"><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*引入createStore*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {createStore} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"redux"</span>;<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*声明一个reducer函数,并设置state的默认值*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">const</span> reducer = <span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">state={name:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span>,sex:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span>},action</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">switch</span>(action.type)<br> {<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">case</span><span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"NAME"</span>:<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>:action.data};<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">break</span>;<br><br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">case</span><span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"SEX"</span>:<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">age</span>:action.data};<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">break</span>;<br> }<br>};<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*创建store对象*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">let</span> store = createStore(reducer);<br></code></pre>
<blockquote style="line-height: inherit; display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0; color: rgba(0, 0, 0, 1); border-left: 5px solid rgba(239, 112, 96, 1); background: rgba(239, 235, 233, 1); overflow: auto; overflow-wrap: normal; word-break: normal">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 0">reducer函数的第一个参数可以设置<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">全局state</strong>对象的<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">默认值</strong>,第二个参数就是action构建函数返回的对象了,reducer根据<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">action.type</code>做出不同的操作,最终返回的对象会与当前全局state进行合并,从而达到更新store的效果</p>
</blockquote>
<h3 id="hprovider" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">使用Provider使组件得到全局数据</span></h3>
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 1.7em 0"><code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Provider</code>组件会让所有被它包裹的子孙<strong style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; font-weight: bold; color: rgba(233, 105, 0, 1)">容器组件</strong>拿到它的store属性中的state作为本身的state对象,因此只需要创建<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>并传给<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Provider</code>的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>属性,让<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Provider</code>作为父元素包裹容器组件就OK了,容器组件的state就有了。</p>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">引入<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">React-Redux</code>中的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Provider</code>组件</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">创建<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code></li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">将<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>作为<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Provider</code>组件的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>属性传入</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">把容器组件包裹在<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">Provider</code>下,容器组件的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">state</code>便得到了store中的数据,并且映射给了显示组件,显示组件就可以显示全局数据了,显示组件中调用<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">mapDispatchToProps</code>中映射的方法便可修改全局数据</li>
</ul>
<pre><code class="javascript language-javascript hljs" style="overflow-wrap: break-word; margin: 0 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0; letter-spacing: 0; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0; overflow-x: auto; padding: 0.5em; background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {Provider} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"react-redux"</span>;<br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {createStore} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"redux"</span>;<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*编写reducer*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">const</span> reducer=<span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">state={name:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"微差"</span>,sex:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"男"</span>},action</span>)=></span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">switch</span>(action.type)<br> {<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">case</span><span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"NAME"</span>:<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>:action.data};<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">break</span>;<br><br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">case</span><span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"SEX"</span>:<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>:action.data};<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">break</span>;<br> }<br>};<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*创建store*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">let</span> store = createStore(reducer);<br><br>ReactDOM.render(<br> <span class="xml" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Provider</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">store</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">{store}</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Container</span>/></span> <br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Provider</span>></span></span><br>,<span class="hljs-built_in" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">document</span>.getElementById(<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"root"</span>));<br></code></pre>
<h3 id="hdemo" style="color: inherit; line-height: inherit; padding: 0; margin: 1.6em 0; font-weight: bold; border-bottom: 2px solid rgba(239, 112, 96, 1); font-size: 1.3em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(239, 112, 96, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">最终DEMO</span></h3>
<pre><code class="javascript language-javascript hljs" style="overflow-wrap: break-word; margin: 0 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0; letter-spacing: 0; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0; overflow-x: auto; padding: 0.5em; background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important"><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*引入必要函数*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {connect,Provider} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"react-redux"</span>;<br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {createStore} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"redux"</span>;<br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">import</span> {render} <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">from</span> <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"react-dom"</span>;<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*声明显示组件*/</span><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">Show</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">props</span>)</span>{<br> <span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*调用onChangeName修改全局数据*/</span><br> <span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">change</span>()</span>{<br> props.onChangeName(<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"change"</span>);<br> }<br><br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> (<br> <span class="xml" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span>姓名:{props.name}<span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span>性别:{props.sex}<span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">input</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">value</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"改变名称"</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">type</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"button"</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">onClick</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">{change}</span> ></span><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">input</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">div</span>></span></span><br> );<br>}<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*编写映射props函数*/</span><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">mapStateToProps</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">state</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">if</span> (<span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">typeof</span> state == <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"undefined"</span>) <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> { <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>: <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span>, <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>: <span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span> };<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>:state.name,<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>:state.sex<br> };<br>};<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*action构造函数*/</span><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">onChangeName</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">data</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">type</span>:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"NAME"</span>,<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">data</span>:data<br> };<br>};<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*编写映射dispatch函数*/</span><br><span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span> <span class="hljs-title" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">mapDispatchToProps</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">dispatch</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span>{<br> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">onChangeName</span>:<span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">data</span>)=></span>{dispatch(onChangeName(data));}<br> };<br>};<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*创建容器组件*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">let</span> Container = connect(mapStateToProps,mapDispatchToProps)(Show);<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*声明一个reducer函数,并设置state的默认值*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">const</span> reducer = <span class="hljs-function" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">function</span>(<span class="hljs-params" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important">state={name:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span>,sex:<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">""</span>},action</span>)</span>{<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">switch</span>(action.type)<br> {<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">case</span><span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"NAME"</span>:<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">name</span>:action.data};<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">break</span>;<br><br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">case</span><span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"SEX"</span>:<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">return</span> {<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">sex</span>:action.data};<br> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">break</span>;<br> }<br>};<br><br><span class="hljs-comment" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 128, 0, 1); word-wrap: inherit !important; word-break: inherit !important">/*创建store对象*/</span><br><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">let</span> store = createStore(reducer);<br><br>render(<span class="xml" style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0; word-wrap: inherit !important; word-break: inherit !important"><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Provider</span> <span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(255, 0, 0, 1); word-wrap: inherit !important; word-break: inherit !important">store</span>=<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">{store}</span>></span><br> <span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"><<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Container</span>/></span><br><span class="hljs-tag" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important"></<span class="hljs-name" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">Provider</span>></span></span>,<span class="hljs-built_in" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(0, 0, 255, 1); word-wrap: inherit !important; word-break: inherit !important">document</span>.getElementById(<span class="hljs-string" style="font-size: inherit; line-height: inherit; margin: 0; padding: 0; color: rgba(163, 21, 21, 1); word-wrap: inherit !important; word-break: inherit !important">"root"</span>));<br></code></pre>
<blockquote style="line-height: inherit; display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em 0; color: rgba(0, 0, 0, 1); border-left: 5px solid rgba(239, 112, 96, 1); background: rgba(239, 235, 233, 1); overflow: auto; overflow-wrap: normal; word-break: normal">
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 0">运行一下看看,点击按钮,将改变名称</p>
</blockquote>
<p style="font-size: inherit; color: inherit; line-height: inherit; padding: 0; margin: 1.7em 0">到这里,一个最简单的原理性的Demo就完成了。</p>
<ul style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0 0 0 32px; list-style-type: disc">
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">Container容器组件通过<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">connect(mapStateToProps,mapDispatchToProps)(Show)</code>方法生成。</li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">Container组件会渲染Show组件。</span></li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0"><span style="font-size: inherit; color: inherit; line-height: inherit; margin: 0; padding: 0">Show组件的props属性与Container组件的state的映射关系由mapStateToProps与mapDispatchToProps配置。</span></li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">通过<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">createStore</code>创建<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>——<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">createStore(reducer)</code></li>
<li style="font-size: inherit; color: inherit; line-height: inherit; margin: 0 0 0.5em; padding: 0">设置Provider的<code style="font-size: inherit; line-height: inherit; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: rgba(248, 35, 117, 1); background: rgba(248, 248, 248, 1)">store</code>,并将Container放置在Provider元素下,Container便能得到Provider中的store作为自己的state,完成映射,因此,connect中配置的映射也可以理解为与store的映射</li>
</ul>
</div><br><br>
来源:https://www.cnblogs.com/shuitao/p/12071422.html
頁:
[1]