<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    前端這個工種未來會繼續(xù)拆分么?

    共 3875字,需瀏覽 8分鐘

     ·

    2021-08-06 10:19

    作者:卡頌

    來源:SegmentFault 思否社區(qū)


    大家好,我是卡頌。


    作為前端,你和UI撕過逼么?


    腦中的場景


    前端:“上線日期定死了,你什么時候出設(shè)計稿?你不出稿子后面開發(fā)、測試都得加班!”


    UI:“快了快了,別催~”


    前端:“做好的先給我吧,我畫靜態(tài)頁面”


    UI:“快了快了,別催~”


    前端流淚,后端沉默,終究測試承擔(dān)了所有......



    你遇到過這種情況么?


    您覺得本質(zhì)原因是什么?如何才能最高效解決這個問題?


    本文會提供一種思路以及可借鑒的產(chǎn)品。


    歡迎文末就這個問題討論


    問題原因


    在現(xiàn)代 Web 開發(fā)困境與破局一文中,作者牛岱談到當(dāng)前前端與UI的配合模式如下:


    圖片來自“現(xiàn)代 Web 開發(fā)困境與破局”


    UI在設(shè)計軟件上完成設(shè)計邏輯、繪制頁面樣式,交付給前端。


    前端根據(jù)UI繪制的樣式重現(xiàn)用CSS+HTML在網(wǎng)頁中再繪制一遍樣式,繪制完畢后再添加功能邏輯。


    為什么UI用設(shè)計軟件繪制的頁面樣式,前端還需要重復(fù)繪制一次?僅僅因為UI用設(shè)計軟件,而前端需要編程么?


    所以,理想的分工應(yīng)該如下:


    圖片來自“現(xiàn)代 Web 開發(fā)困境與破局”


    即UI完成設(shè)計邏輯與頁面樣式(通過設(shè)計軟件),軟件根據(jù)規(guī)范生成前端可用的靜態(tài)頁面代碼,前端基于生成的代碼編寫功能邏輯。


    大白話講就是:


    前端不用畫靜態(tài)頁了


    雖然這套流程有諸多難點需要解決,比如:


    • 對于UI來說,頁面是一張張圖層,對于前端則是一個個組件,怎么對齊這兩者差異
    • 需要UI了解基本的頁面布局(浮動、flex、絕對定位...),才能生成符合響應(yīng)式規(guī)范的靜態(tài)頁

    但是,瑕不掩瑜,如果能跑通這套流程,開發(fā)效率將極大提升。


    mitosis就是這方面的一次大膽嘗試。

    一次大膽嘗試


    BuilderIO是一家低代碼平臺,主做拖拽生成頁面。mitosis的作者是BuilderIO的CEO。


    用一張圖概括mitosis的定位:


    左起第一排分別是:sketch、Figma、BuilderIO,前兩者是知名設(shè)計軟件,后者是低代碼平臺。

    當(dāng)UI使用這些軟件完成頁面設(shè)計,經(jīng)由插件輸出到mitosis后,mitosis能將其輸出成多種知名前端框架代碼。

    設(shè)計圖一步到位變成前端框架代碼,前端就不用畫靜態(tài)頁了。

    他是怎么做到的?

    現(xiàn)代前端框架都是以組件作為邏輯、視圖的分割單元。而組件是可以被描述的。
    比如React的Fiber,Vue的VNode,都是描述組件信息的節(jié)點類型。

    mitosis將設(shè)計圖轉(zhuǎn)化為框架無關(guān)的JSON,類似這樣:

    {
      "@type""@builder.io/mitosis/component",
      "state": {
        "name""Steve"
      },
      "nodes": [
        {
          "@type""@builder.io/mitosis/node",
          "name""div",
          "children": [
            {
              "@type""@builder.io/mitosis/node",
              "bindings": {
                "value""state.name",
                "onChange""state.name = event.target.value"
              }
            }
          ]
        }
      ]
    }

    這段JSON描述的是一個component類型(即組件),其包含狀態(tài)name,nodes代表組件對應(yīng)的視圖。

    如果輸出目標(biāo)是React,那么代碼如下:

    export function MyComponent() {
      const [name, updateName] = useState('Steve');

      return (
        <div>
          <input
            value={name}
            onChange={(e) => updateName(e.target.value)}
          />
        </div>
      );
    }

    小小心機(jī)


    如果你仔細(xì)看這張圖會發(fā)現(xiàn),mitosis還能反向輸出到設(shè)計軟件。


    是的,mitosis 本身也是個框架。有意思的是,他更像是個前端框架縫合怪。
    他采用了:

    • React的Hooks語法
    • Vue的響應(yīng)式更新
    • Solid.js的靜態(tài)JSX
    • Svelte的預(yù)編譯技術(shù)
    • Angular的規(guī)范

    上面的代碼例子,如果用mitosis語法寫:

    export function MyComponent() {
      const state = useState({
        name: 'Steve',
      });

      return (
        <div>
          <input
            value={state.name}
            onChange={(e) => (state.name = e.target.value)}
          />
        </div>
      );
    }

    未曾設(shè)想的道路?


    我們在開篇談到阻礙前端直接使用設(shè)計軟件生成靜態(tài)代碼的兩個痛點:

    • 對于UI來說,頁面是一張張圖層,對于前端則是一個個組件,怎么對齊這兩者差異

    • 需要UI了解基本的頁面布局(浮動、flex、絕對定位...),才能生成復(fù)合響應(yīng)式規(guī)范的靜態(tài)頁


    我們設(shè)想一下,當(dāng)使用mitosis開啟一個新項目,流程如下:

    1. 由懂設(shè)計的前端基于mitosis開發(fā)初始代碼
    2. 代碼輸出為設(shè)計稿
    3. 專業(yè)UI基于設(shè)計稿(符合組件規(guī)范、響應(yīng)式規(guī)范)潤色
    4. 設(shè)計稿經(jīng)由mitosis輸出為任意前端框架代碼
    5. 前端基于框架代碼開發(fā)

    這樣,就解決了以上痛點。

    總結(jié)


    在項目開發(fā)過程中,前端需要與后端配合。久而久之,一部分前端同學(xué)涉足接口轉(zhuǎn)發(fā)的中間層,成為業(yè)務(wù)+Node工程師。

    同樣,前端也需要與UI配合,會不會如上文所設(shè)想,未來會出現(xiàn)一批UI+前端工程師呢?



    點擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開更多互動和交流,掃描下方”二維碼“或在“公眾號后臺回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

    - END -


    瀏覽 31
    點贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    日本九九视频 | 成人肏屄大片网站 | 中文不卡在线 | 嫩苞又嫩又紧AV无码 | 免费在线观看亚洲天堂 |