<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>React 组件设计模式 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/react-%E7%BB%84%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</link><description>Recent content in React 组件设计模式 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 16 Jul 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/react-%E7%BB%84%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/index.xml" rel="self" type="application/rss+xml"/><item><title>react 组件设计模式</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/react/react-021/</link><pubDate>Tue, 17 Dec 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/react/react-021/</guid><description>&lt;p&gt;首先我们想一个问题，那就是 &lt;strong&gt;为什么要学习设计模式？&lt;/strong&gt; 原因我总结有以下几个方面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 功能复杂，逻辑复用问题。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先 React 灵活多变性，就决定了 React 项目可以应用多种设计模式。但是这些设计模式的产生也确实办了实事:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;场景一：&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在一个项目中，全局有一个状态，可以称之为 theme （主题），那么有很多 UI 功能组件需要这个主题，而且这个主题是可以切换的，就像 github 切换暗黑模式一样，那么如何优雅的实现这个功能呢？&lt;/p&gt;
&lt;p&gt;这个场景如果我们用 React 的&lt;strong&gt;提供者模式&lt;/strong&gt;，就能轻松搞定了，通过 &lt;code&gt;context&lt;/code&gt; 保存全局的主题，然后将 &lt;code&gt;theme&lt;/code&gt; 通过 &lt;code&gt;Provider&lt;/code&gt; 形式传递下去，需要 theme ，那么消费 context ，就可以了，这样的好处是，只要 theme 改变，消费 context 的组件就会重新更新，达到了切换主题的目的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;场景二：&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;表单设计场景也需要一定程度上的 React 的设计模式，首先对于表单状态的整体验证需要外层的 &lt;code&gt;Form&lt;/code&gt; 绑定事件控制，调度表单的状态下发，验证功能。内层对于每一个表单控件还需要 &lt;code&gt;FormItem&lt;/code&gt; 收集数据，让控件变成受控的。 这样的 &lt;code&gt;Form&lt;/code&gt; 和 &lt;code&gt;FormItem&lt;/code&gt; 方式，就是通过&lt;strong&gt;组合模式&lt;/strong&gt;实现的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 培养设计能力，编程能力&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;熟练运用 React 的设计模式，可以培养开发者的设计能力，比如 &lt;strong&gt;&lt;code&gt;HOC&lt;/code&gt; 的设计&lt;/strong&gt; ，&lt;strong&gt;公共组件的设计&lt;/strong&gt; ，&lt;strong&gt;自定义 hooks 的设计&lt;/strong&gt;，一些开源的优秀的库就是通过 React 的灵活性和优秀的设计模式实现的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;例子：&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如在 React 状态管理工具中，无论是 &lt;code&gt;react-redux&lt;/code&gt; ，还是 &lt;code&gt;mobx-react&lt;/code&gt;，一方面想要把 &lt;code&gt;state&lt;/code&gt; 和 &lt;code&gt;dispatch&lt;/code&gt; 函数传递给组件，另一方面订阅 state 变化，来促使业务组件更新，那么整个流程中，需要一个或多个 HOC 来搞定。于是 react-redux 提供了 &lt;code&gt;connect&lt;/code&gt;，mobx-react 提供了 &lt;code&gt;inject&lt;/code&gt; ，&lt;code&gt;observer&lt;/code&gt; 等优秀的 hoc。由此可见，学会 React 的设计模式，有助于开发者小到编写公共组件，大到开发开源项目。&lt;/p&gt;</description></item></channel></rss>