<?xml version="1.0" encoding="utf-8"?>
<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>Carrgan universe Blog</title>
        <link>https://carrgan.github.io/tech-blog</link>
        <description>Carrgan universe Blog</description>
        <lastBuildDate>Sat, 29 Jul 2023 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-Hans</language>
        <item>
            <title><![CDATA[Code beat first MVP]]></title>
            <link>https://carrgan.github.io/tech-blog/code-beat-first-mvp</link>
            <guid>https://carrgan.github.io/tech-blog/code-beat-first-mvp</guid>
            <pubDate>Sat, 29 Jul 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[最近，正在构思一个游戏Code beat，一个音乐游戏，讲述程序员升职的故事。游戏需要根据音乐节奏来写代码，从而实现程序员升职。打算把之后每个重要的历史版本托管在Code beat，]]></description>
            <content:encoded><![CDATA[<p>最近，正在构思一个游戏<em>Code beat</em>，一个音乐游戏，讲述程序员升职的故事。游戏需要根据音乐节奏来写代码，从而实现程序员升职。打算把之后每个重要的历史版本托管在<a class="" href="https://carrgan.github.io/codeBeatLive/">Code beat</a>，</p>
<p>每一段代码中，每一个字符都必须在节奏上敲出来，如果早了晚了都会扣分。扣分之后程序会出现bug，可能在后面的关卡中要回头来解决bug。</p>
<p>如果bug太多，程序就直接不能运行，报错提示闯关失败。</p>
<p>在写代码的时候，有一些类似 IDE 快捷键的功能，可以通过.var来快速初始化变量 etc...</p>
<p>游戏提供不同的难度选择</p>
<ul>
<li class="">Level 1: 用户只需要输入对应的字符，不需要在意大小写和特殊字符</li>
<li class="">Level 2: 大小写敏感</li>
<li class="">Level 3: 需要输入特殊字符</li>
</ul>
<p>有了构思之后，用Phaser 3，搭建了一个脚手架，虽然使用rollup打包的部分还需要做一些优化，好在花了一天时间写出了一个 MVP（Minimum Viable Product)，<a class="" href="https://carrgan.github.io/codeBeatLive/firstMVP/index.html">这里有个在线预览</a>，包含一些核心功能。</p>]]></content:encoded>
            <category>Front end</category>
            <category>Code beat</category>
        </item>
        <item>
            <title><![CDATA[在Controller返回之后，如何继续使用DBContext]]></title>
            <link>https://carrgan.github.io/tech-blog/charp-db-context-out-of-controller</link>
            <guid>https://carrgan.github.io/tech-blog/charp-db-context-out-of-controller</guid>
            <pubDate>Fri, 28 Jul 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[在 .NET 中，可能会出现需要异步执行一些代码的情况，在 Controller 返回之后，尝试使用注入的 DbContext 会出错。这通常是因为 DbContext 的生命周期与 Controller 不同，导致 DbContext 已经失效或已被销毁。]]></description>
            <content:encoded><![CDATA[<p>在 .NET 中，可能会出现需要异步执行一些代码的情况，在 Controller 返回之后，尝试使用注入的 DbContext 会出错。这通常是因为 DbContext 的生命周期与 Controller 不同，导致 DbContext 已经失效或已被销毁。</p>
<p>在 ASP.NET Core 中，可以使用依赖注入来管理 DbContext 的生命周期。默认情况下，ASP.NET Core 使用 Scoped 生命周期来注册 DbContext，这意味着每个请求将获得一个独立的 DbContext 实例。这通常是很好的，因为这种生命周期的 DbContext 可以在请求处理期间持久化跨越多个操作的状态。</p>
<p>如果你在 Controller 返回之后仍需要使用已注入的 DbContext，则可以尝试以下方法之一：</p>
<ol>
<li class="">
<p>将 DbContext 注册为 Singleton 生命周期。</p>
<p>如果你明确了解你应用中 DbContext 的生命周期，并且你需要在 Controller 结束时后继续使用 DbContext 实例，则可以将其注册为 Singleton 生命周期。但是这通常不是一个好的解决方案，因为 DbContext 是不是一个线程安全的对象。</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token generic-method function" style="color:rgb(130, 170, 255)">AddSingleton</span><span class="token generic-method generic class-name punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token generic-method generic class-name" style="color:rgb(255, 203, 139)">MyDbContext</span><span class="token generic-method generic class-name punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>使用 DbContextPool</p>
<p>ASP.NET Core 中的 DbContext 池化提供了一种 DbContext 的重新利用机制，可以在 DbContext 实例不再使用时自动销毁 DbContext，以提高性能。若要使用 DbContextPool，需要执行以下操作：</p>
<p>首先，需要将 DbContext 注册为 Scoped 生命周期，然后在 Startup 类的 ConfigureServices 方法中启用 context 池:</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token plain">services</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token generic-method function" style="color:rgb(130, 170, 255)">AddDbContextPool</span><span class="token generic-method generic class-name punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token generic-method generic class-name" style="color:rgb(255, 203, 139)">MyDbContext</span><span class="token generic-method generic class-name punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">options </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">UseSqlServer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Configuration</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">GetConnectionString</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"DefaultConnection"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">UseLoggerFactory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">loggerFactory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// 选填日志工厂</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">EnableSensitiveDataLogging</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// 启用敏感数据记录</span><br></div></code></pre></div></div>
<p>接下来，在需要使用 DbContext 的地方，需要在 IServiceScopeFactory 接口中使用 scoped 服务对象。</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 139)">MyController</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token type-list class-name" style="color:rgb(255, 203, 139)">ControllerBase</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">private</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">readonly</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 139)">IServiceScopeFactory</span><span class="token plain"> _scopeFactory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">public</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">MyController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token class-name" style="color:rgb(255, 203, 139)">IServiceScopeFactory</span><span class="token plain"> scopeFactory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">     _scopeFactory </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> scopeFactory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">private</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">async</span><span class="token plain"> </span><span class="token return-type class-name" style="color:rgb(255, 203, 139)">Task</span><span class="token return-type class-name punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token return-type class-name" style="color:rgb(255, 203, 139)">MyEntity</span><span class="token return-type class-name punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">GetMyEntityAsync</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token class-name keyword" style="color:rgb(127, 219, 202)">int</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">using</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token class-name keyword" style="color:rgb(127, 219, 202)">var</span><span class="token plain"> scope </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> _scopeFactory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">CreateScope</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token class-name keyword" style="color:rgb(127, 219, 202)">var</span><span class="token plain"> dbContext </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> scope</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ServiceProvider</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token generic-method function" style="color:rgb(130, 170, 255)">GetRequiredService</span><span class="token generic-method generic class-name punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token generic-method generic class-name" style="color:rgb(255, 203, 139)">MyDbContext</span><span class="token generic-method generic class-name punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">await</span><span class="token plain"> dbContext</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">MyEntities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">FindAsync</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p>在上述示例中，我们创建了一个使用 scoped 生命周期的 DbContext 的作用域，然后使用该作用域中的 DbContext 来到查询 MyEntity 实体的记录。之所以要使用作用域，是因为在 Controller 返回之后，作用域将被销毁，由此产生的 DbContext 实例也将被销毁或重新放入 DbContext 池中，以便将来的请求使用。</p>
</li>
</ol>]]></content:encoded>
            <category>csharp</category>
        </item>
        <item>
            <title><![CDATA[前端的环境变量]]></title>
            <link>https://carrgan.github.io/tech-blog/process-env-node-env</link>
            <guid>https://carrgan.github.io/tech-blog/process-env-node-env</guid>
            <pubDate>Fri, 01 Apr 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Process Env]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="process-env">Process Env<a href="https://carrgan.github.io/tech-blog/process-env-node-env#process-env" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading" translate="no">​</a></h2>
<p>在正常的开发流程中，通常会经历Development/Acceptance(Test)/Production阶段，可能你会想在不同的环境做不同的事，或是给同一个变量赋不同的值。</p>
<p>后端代码获得环境变量的方法非常简单，只用在不同的环境下读取不同的配置文件，或者是读取操作系统定义的环境变量即可。</p>
<p>可是前端代码是运行在浏览上的我们如何去读取环境变量呢？</p>
<p>通常使用现代框架 (React/Vue) 的前端程序员在开发代码的时候，都会用到webpack，前端的环境变量其实是在webpack打包的时候被定义的。</p>
<p>通常，在我们启动开发服务器的时候 <code>npm run start</code> webpack将 <code>process.env.NODE_ENV</code> 打包为<code>development</code>，而我们在运行 <code>npm run build</code> 的是时候 webpack 把 <code>process.env.NODE_ENV</code> 打包为 <code>production</code>。</p>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>警告</div><div class="admonitionContent_BuS1"><p><code>process</code>并不是一个对象，<code>process.env</code>也不是一个对象，如果你写出如下语句<code>console.log(process.env)</code>你会得到一个<code>process undefined</code>错误。
但是你写出<code>console.log(process.env.NODE_ENV)</code>你会得到一个字符串。是什么如此神器？事实上在webpack打包的时候，webpack自动把<code>process.env.NODE_ENV</code>替换成<code>"development"</code>了。</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configjs">Config.js<a href="https://carrgan.github.io/tech-blog/process-env-node-env#configjs" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading" translate="no">​</a></h2>
<p>例用以上特性就可以实现在开发的时候和打包之后运行不同的代码或者给同一个变量赋不同的值</p>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> config </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">env</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">NODE_ENV</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"developemt"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">DEV_CONFIG</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">PROD_CONFIG</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">env</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">NODE_ENV</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"developemt"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">funcDev</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">funcProd</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>但是这远远还不够，在一个大的开发团队中，三个环境都需要打包，并运行在不同的机器上进行，这种情况下如何配置不同的变量呢？</p>
<p>我们可以在public文件夹下创建一个配置文件</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">public/runtime-config.js</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token dom variable" style="color:rgb(214, 222, 235)">window</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">config</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">clintId</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"xxxx"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">public/index.html</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">script</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">%PUBLIC_URL%/runtime-config.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">Any File</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> clintId </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">window </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">config</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">clintId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>public/runtime-config.js 在打包之后会被放到打包文件的跟目录下，而写在头里的script会优先运行我们的config文件，将我们的config对象挂到window上，这样后续的代码就能拿到config对象的了。</p>
<p>我们只需要去到不同机器上修改runtime-config.js就可以对不同的环境应用不同的变量了。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cicd">CI/CD<a href="https://carrgan.github.io/tech-blog/process-env-node-env#cicd" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading" translate="no">​</a></h2>
<p>当然在运用CI/CD的项目中我们就可以省去手动更改的步骤了，结合上述两种方法在CD的过程中直接替换Config里的变量就可以了。</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">public/runtime-config.js</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token dom variable" style="color:rgb(214, 222, 235)">window</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">config</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">clintId</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"#{clintID}#"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">public/index.html</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">script</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">%PUBLIC_URL%/runtime-config.js</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">any file</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> clintId </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">env</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">NODE_ENV</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"development"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"xxx"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">window </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">config</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">clintId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>这样在本地开发服务器运行的时候，我们获得的clintID永远是"xxx"，而在设置部署CD的时候，我们根据不同的环境替换掉<code>runtime-config.js</code>中的<code>#{clintId}#</code>就可以了。</p>
<p>部署到服务器之后，我们会去读取不同环境挂在window上的不同配置。</p>
<p>不同CD工具有不同的配置方法，一下已Azure DevOps为例</p>
<p>首先在<code>Pipelines-&gt;Library</code>下创建Variable group，并写入当前环境下的key-value</p>
<p><img decoding="async" loading="lazy" alt="Library" src="https://carrgan.github.io/assets/images/LibraryPipelines-79d656c1d0fcdf81d1281ab74a60d6ed.png" width="1182" height="719" class="img_ev3q"></p>
<p>在Releases中构建CD的时候引用该Group到当前部署阶段</p>
<p><img decoding="async" loading="lazy" alt="Link Variable" src="https://carrgan.github.io/assets/images/link_variable-e7b695da1fe933f20b1d6d0a2c2c6894.png" width="783" height="538" class="img_ev3q"></p>
<p>在CD中使用replace tokens替换变量</p>
<p><img decoding="async" loading="lazy" alt="Replace Tokens" src="https://carrgan.github.io/assets/images/replace_tokens-4f16e9ec76bd96c8236ecd834e4077d7.png" width="2190" height="1090" class="img_ev3q"></p>]]></content:encoded>
            <category>Front-end</category>
        </item>
        <item>
            <title><![CDATA[CSS自适应固定长款比容器]]></title>
            <link>https://carrgan.github.io/tech-blog/dynamic-height-container</link>
            <guid>https://carrgan.github.io/tech-blog/dynamic-height-container</guid>
            <pubDate>Sun, 27 Mar 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Padding]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="padding">Padding<a href="https://carrgan.github.io/tech-blog/dynamic-height-container#padding" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading" translate="no">​</a></h2>
<p>实现自适应长款比的关键就是padding，在设置padding的时候使用 <code>%</code> 计算的值是根据宽度计算的，</p>
<p>也就是说 <code>padding: 50%</code> 其实是基于容器宽度的50%。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="容器实现">容器实现<a href="https://carrgan.github.io/tech-blog/dynamic-height-container#%E5%AE%B9%E5%99%A8%E5%AE%9E%E7%8E%B0" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading" translate="no">​</a></h2>
<p>根据padding的这一特性实现这一容器就很简单了</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">16/9占满屏幕的容器</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">container</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">content</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<div class="language-css codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">16/9占满屏幕的容器</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-css codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token selector class" style="color:rgb(199, 146, 234);font-style:italic">.container</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">width</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">padding-bottom</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">56.25</span><span class="token unit">%</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token selector class" style="color:rgb(199, 146, 234);font-style:italic">.content</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">width</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">height</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p>同理可对一个容器实现一个遮罩层</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">16/9占满屏幕的背景和一个悬浮居中的图标</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">container</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">background</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">class</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">content</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">svg</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">35px</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">35px</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">svg</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<div class="language-css codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">16/9占满屏幕的背景和一个悬浮居中的图标</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-css codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token selector class" style="color:rgb(199, 146, 234);font-style:italic">.container</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">width</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">padding-bottom</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">56.25</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">position</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> relative</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">top</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">left</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token selector class" style="color:rgb(199, 146, 234);font-style:italic">.background</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">width</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">position</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> absolute</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">top</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">left</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">z-index</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token selector class" style="color:rgb(199, 146, 234);font-style:italic">.content</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">width</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token unit">%</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">position</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> absolute</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">top</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">calc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">50</span><span class="token unit">%</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">35</span><span class="token unit">px</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">left</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">calc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">50</span><span class="token unit">%</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">35</span><span class="token unit">px</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">z-index</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>Front end</category>
            <category>CSS</category>
        </item>
        <item>
            <title><![CDATA[用Hook做高级封装]]></title>
            <link>https://carrgan.github.io/tech-blog/react/hook/advance-encapsulation</link>
            <guid>https://carrgan.github.io/tech-blog/react/hook/advance-encapsulation</guid>
            <pubDate>Tue, 22 Mar 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[在代码中有大量相同的组件引用和状态引用场景的情况下，利用自定义Hook对功能进行统一封装，有利于代码复用和维护。]]></description>
            <content:encoded><![CDATA[<p>在代码中有大量相同的组件引用和状态引用场景的情况下，利用自定义Hook对功能进行统一封装，有利于代码复用和维护。</p>
<p>例如在不同的三个视图中都存在表格，如果我们都需要对表格的每一列排序并构建Filter，就会存在大量的代码耦合情况。</p>
<p>采用传统的构建结构我们需要在每一个视图中记录一个Filter状态。</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">View A</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">View B</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">View C</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IViewADefaultFilter</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IViewADefaultSort</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IViewBDefaultFilter</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IViewBDefaultSort</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IViewCDefaultFilter</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IViewCDefaultSort</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></div></div>
<p>在每一个View中，重复对每一列引用Filter组件</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">View A</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">View B</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">View C</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">/src/view/viewA.jsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">Name</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">InputDropdownFilter</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">name</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onValueChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"name"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSortChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"name"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">sortStatus</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedSort</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">columnsA</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onApply</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handelFilterApply</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClean</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript parameter" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">""</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">Birthday</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">TimeDropdownFilter</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">dateString</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">birthday</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onValueChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"birthday"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSortChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"birthday"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">sortStatus</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedSort</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">birthday</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onApply</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handelFilterApply</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClean</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript parameter" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript keyword module" style="color:rgb(127, 219, 202)">from</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">""</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript literal-property property" style="color:rgb(128, 203, 196)">to</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">""</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">/src/view/viewB.jsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">School</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">InputDropdownFilter</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">school</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onValueChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"school"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSortChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"school"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">sortStatus</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedSort</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">school</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onApply</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handelFilterApply</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClean</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript parameter" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">""</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">Teacher</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ListDropdownFilter</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">selectedItem</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">teacher</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">item</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">item</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onValueChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"teacher"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSortChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"teacher"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">sortStatus</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedSort</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">teacher</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onApply</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handelFilterApply</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClean</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript parameter" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> defaultFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">/src/view/viewC.jsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">Onboard Day</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">TimeDropdownFilter</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">dateString</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">onboardDay</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onValueChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"onboardDay"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSortChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"onboardDay"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">sortStatus</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedSort</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">onboardDay</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onApply</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handelFilterApply</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClean</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript parameter" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript keyword module" style="color:rgb(127, 219, 202)">from</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">""</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript literal-property property" style="color:rgb(128, 203, 196)">to</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">""</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">Student</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ListDropdownFilter</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">selectedItem</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">student</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">item</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">item</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onValueChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"student"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSortChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">"student"</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">sortStatus</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">editedSort</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">student</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onApply</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handelFilterApply</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClean</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript parameter" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">f</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> defaultFilter</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">filterKey</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<p>可见在ViewA、ViewB、ViewC中有90%的代码都是相似的，唯一不同的就是列名，还有每一列的顺序和类型。</p>
<p>整理每个组件的类型后，构建高级Hook来封装状态，并统一暴露方法。</p>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>用Hook的实现方式</summary><div><div class="collapsibleContent_i85q"><div><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">src/component/helper.tsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> useDropdownFilter </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  IDefaultFilter </span><span class="token keyword" style="color:rgb(127, 219, 202)">extends</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> IDateString </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> IListBuilderItem</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  IDefaultSort </span><span class="token keyword" style="color:rgb(127, 219, 202)">extends</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> ISortStatus </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  defaultFilter</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> IDefaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  defaultSort</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handelFilterApply</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">void</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IDefaultFilter</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEditedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">useState</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 139)">IDefaultSort</span><span class="token generic-function generic class-name operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">defaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> IDateString </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> IListBuilderItem</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">f </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">...</span><span class="token plain">f</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> value </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> ISortStatus</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token function" style="color:rgb(130, 170, 255)">setEditedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">f </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">...</span><span class="token plain">f</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> value </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> inputDropdownFilter </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    filterKey</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    position</span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"left"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"right"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">undefined</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">label</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token plain">InputDropdownFilter</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        position</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">position</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        value</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onValueChange</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onSortChange</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        sortStatus</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onApply</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">handelFilterApply</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onClean</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">f </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">...</span><span class="token plain">f</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">timeDropdownFilter</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">label</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token plain">TimeDropdownFilter</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        dateString</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> IDateString</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onValueChange</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onSortChange</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        sortStatus</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onApply</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">handelFilterApply</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onClean</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">f </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">...</span><span class="token plain">f</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> from</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> to</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">listDropdownFilter</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    filterKey</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    item</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> IListBuilderItem</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">label</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token plain">ListDropdownFilter</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        selectedItem</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> IListBuilderItem</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        item</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">item</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onValueChange</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">handelFilterChange</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onSortChange</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">handelSortChange</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">filterKey </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        sortStatus</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey </span><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">keyof</span><span class="token plain"> IDefaultSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onApply</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">handelFilterApply</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        onClean</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">setEditedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">f </span><span class="token operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">...</span><span class="token plain">f</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> defaultFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">filterKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    inputDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    timeDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    listDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    editedSort</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div></div></div></div></details>
<p>现在在每一个View中只需要应用次Hook并调用合适的方法渲染Filter就可以了</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">View A</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">View B</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">View C</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">/src/view/viewA.jsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> inputDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> timeDropdownFilter </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">useDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">name</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">birthday</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword module" style="color:rgb(127, 219, 202)">from</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">to</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  filterInit</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ISorts</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">(Object.keys(EViewAFilterKey), undefined),</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  handelFilterApply</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">);</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">return (</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">inputDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"name"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Name"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">timeDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"birthDay"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Name"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">)</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">/src/view/viewB.jsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> inputDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> listDropdownFilter </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">useDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">school</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">teacher</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> teacherItems</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  filterInit</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ISorts</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">(Object.keys(EViewBFilterKey), undefined),</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  handelFilterApply</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">);</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">return (</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">inputDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"school"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"School"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">listDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"teacher"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Teacher"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> teacherItems</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">)</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockTitle_OeMC">/src/view/viewC.jsx</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> editedFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> editedSort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> timeDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> listDropdownFilter </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">useDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">onboardDay</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword module" style="color:rgb(127, 219, 202)">from</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">to</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">""</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token literal-property property" style="color:rgb(128, 203, 196)">student</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token maybe-class-name">StudentItems</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  filterInit</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ISorts</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">(Object.keys(EViewCFilterKey), undefined),</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  handelFilterApply</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">);</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">return (</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">timeDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"onboardDay"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"OnboardDay"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token function" style="color:rgb(130, 170, 255)">listDropdownFilter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">"student"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Student"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token maybe-class-name">StudentItems</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain-text">)</span><br></div></code></pre></div></div></div></div></div>
<p>减少了非常多的代码量，代码也更加利于读懂，维护起来也只用维护hook就可以了</p>]]></content:encoded>
            <category>Front end</category>
            <category>React</category>
        </item>
    </channel>
</rss>