<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>蜂群UI组件文档 Blog</title>
        <link>https://newtest-fq-ui.ifengqun.com/blog</link>
        <description>蜂群UI组件文档 Blog</description>
        <lastBuildDate>Wed, 04 Sep 2024 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <item>
            <title><![CDATA[蜂群 UI 设计思维]]></title>
            <link>https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design</link>
            <guid>https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design</guid>
            <pubDate>Wed, 04 Sep 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[在蜂群中，较多设计是围绕主题定制方式进行的，因此不适合公共的样式。我们需要灵活地应对业务需求的变化，通过设计一套适合蜂群的组件库来适配业务。我们将采用最原子的方式去设计组件，在对应的项目侧拓展相应的组件主题与样式。]]></description>
            <content:encoded><![CDATA[<p>在蜂群中，较多设计是围绕主题定制方式进行的，因此不适合公共的样式。我们需要灵活地应对业务需求的变化，通过设计一套适合蜂群的组件库来适配业务。我们将采用最原子的方式去设计组件，在对应的项目侧拓展相应的组件主题与样式。</p>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="传统的业务流程">传统的业务流程<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#%E4%BC%A0%E7%BB%9F%E7%9A%84%E4%B8%9A%E5%8A%A1%E6%B5%81%E7%A8%8B" class="hash-link" aria-label="传统的业务流程的直接链接" title="传统的业务流程的直接链接" translate="no">​</a></h2>
<ol>
<li class="">产品 A 会有一个想法</li>
<li class="">产品 B 也会有一个想法</li>
</ol>
<p>这导致我们的设计师有各个版本的 UI 视觉，大家都有所经历过。</p>
<p>我曾经与 UI 进行沟通，发现我们定制化场景实在太多，因此无法满足业务需求，不能固定写死重型的一套样式的组件。</p>
<p>我们决定用开发思路来解决这个问题，设计上应将样式部分独立到业务场景中进行个性化定制，包括解耦掉 HTML 上的强耦合标签样式。</p>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="限制">限制<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#%E9%99%90%E5%88%B6" class="hash-link" aria-label="限制的直接链接" title="限制的直接链接" translate="no">​</a></h2>
<p>使用过的同学肯定也知道现成 UI 组件库的一些痛点，比如：</p>
<ul>
<li class=""><strong>样式难以定制</strong>：一个萝卜一个坑，一个公司一套样式，一个项目一套样式，劣势被放大。</li>
<li class=""><strong>耦合性高</strong>：传统 UI 组件库通常将界面样式、数据逻辑和用户交互等功能耦合在一起，导致代码难以维护和扩展。</li>
<li class=""><strong>创意受限</strong>：设计师根据现有传统 UI 组件库提供的固定组件和样式，拓展创意受到限制。</li>
<li class=""><strong>依赖过多</strong>：传统 UI 组件库可能依赖大量第三方库和插件，增加项目复杂性和维护成本。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="headless-是组件思维">Headless 是组件思维<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#headless-%E6%98%AF%E7%BB%84%E4%BB%B6%E6%80%9D%E7%BB%B4" class="hash-link" aria-label="Headless 是组件思维的直接链接" title="Headless 是组件思维的直接链接" translate="no">​</a></h2>
<p>Headless UI 是由 Shopify 公司开发的开源工具包，旨在帮助开发人员构建可访问、灵活和易于定制的用户界面组件。Headless UI 的设计思路主要包括：</p>
<ol>
<li class=""><strong>无样式</strong>：提供的组件是“无样式”的，意味着它们不包含任何设计样式，开发人员可以完全自定义外观。</li>
<li class=""><strong>无障碍</strong>：专注于构建具有良好可访问性的组件，确保所有用户都能轻松使用，并符合 Web 内容无障碍指南（WCAG）。</li>
<li class=""><strong>灵活性</strong>：组件设计非常灵活，开发人员可以根据需求自由组合和定制组件。</li>
<li class=""><strong>基于原子设计</strong>：遵循原子设计原则，将界面拆分为更小的功能单元，使每个组件独立使用，同时可以组合构建复杂界面。</li>
</ol>
<p>Headless UI 注重可访问性、灵活性和定制性，帮助开发人员构建高质量的用户界面组件，同时保持代码简洁和易于维护。</p>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="使用示例">使用示例<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B" class="hash-link" aria-label="使用示例的直接链接" title="使用示例的直接链接" translate="no">​</a></h2>
<p>通过 Headless UI 思维设计一个 Button 组件的步骤：</p>
<ol>
<li class=""><strong>定义组件的 API</strong>：确定 Button 组件的可配置项，例如文本内容、样式、大小、点击事件等。</li>
<li class=""><strong>构建无样式的按钮组件</strong>：使用 Headless UI 提供的无样式组件作为基础，提供功能完备但无样式的按钮。</li>
<li class=""><strong>添加样式覆盖</strong>：通过添加自定义的 CSS 类名或内联样式，为按钮组件添加所需样式。</li>
<li class=""><strong>处理交互和事件</strong>：为按钮组件添加交互和事件处理逻辑，例如添加点击事件处理函数。</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="headless-ui-的应用场景">Headless UI 的应用场景<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#headless-ui-%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="Headless UI 的应用场景的直接链接" title="Headless UI 的应用场景的直接链接" translate="no">​</a></h2>
<p>根据个人经验总结的实际应用场景：</p>
<ol>
<li class=""><strong>跨平台应用</strong>：同个项目在多个平台上共存，样式不一致时，Headless UI 可以发挥作用。</li>
<li class=""><strong>定制化界面</strong>：项目需要高度定制样式和功能，使用 Headless UI 是一个不错的选择。</li>
<li class=""><strong>公司项目较多</strong>：在一个公司中，业务场景大，项目较多，Headless UI 是很好的选择。</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="注意事项">注意事项<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" class="hash-link" aria-label="注意事项的直接链接" title="注意事项的直接链接" translate="no">​</a></h2>
<p>Headless UI 并不适用于所有项目：</p>
<ul>
<li class="">如果项目简单，对设计没有较大要求，使用现成的 UI 库更合适。</li>
<li class="">如果团队的技术水平参差不齐，还是用现成的组件库比较好。</li>
<li class="">切勿为了跟风而随意尝试技术，需从实际出发。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="设计思维参与">设计思维参与<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#%E8%AE%BE%E8%AE%A1%E6%80%9D%E7%BB%B4%E5%8F%82%E4%B8%8E" class="hash-link" aria-label="设计思维参与的直接链接" title="设计思维参与的直接链接" translate="no">​</a></h2>
<p><a href="https://headlessui.com/" target="_blank" rel="noopener noreferrer" class="">Headless UI</a></p>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="单元测试介入">单元测试介入<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E4%BB%8B%E5%85%A5" class="hash-link" aria-label="单元测试介入的直接链接" title="单元测试介入的直接链接" translate="no">​</a></h2>
<p>组件都需要经过单元测试进行断言，需要针对 Props 定义进行每个进行 Jest 断言。</p>
<h2 class="anchor anchorTargetStickyNavbar_vbkT" id="mastergo-链接">MasterGo 链接<a href="https://newtest-fq-ui.ifengqun.com/blog/2024/09/04/ui-design#mastergo-%E9%93%BE%E6%8E%A5" class="hash-link" aria-label="MasterGo 链接的直接链接" title="MasterGo 链接的直接链接" translate="no">​</a></h2>
<p><a href="https://mastergo.com/file/136201724176736?page_id=M" target="_blank" rel="noopener noreferrer" class="">https://mastergo.com/file/136201724176736?page_id=M</a></p>]]></content:encoded>
        </item>
    </channel>
</rss>