[自译]code with design -我们怎样构建工具,从Sketch导出React原型

作者分享了自己在团队Demo周中,合作完成的一款原型工具,将sketch文件映射到react框架的原型去,真棒~虽然用不上,但是也可以看看作者实现的思路,以及对现在设计和开发中问题的一些思考,感兴趣去原文阅读也十分不错!

原文链接:Code with Design — How we Built a Tool to Export React Prototypes from Sketch

原文作者:Joel Besada

每年,假期之前,我们都会花一个星期的时间去做一些工作之外的事情。我们把它叫做Demo周,这是一个很好的机会,和共事的人一起探索新想法。可以是一个实验性的产品,公司流程的改进,购物的LED实时地图,或者任何可以改进的东西。不过它必须在这一周里落地。

今年,我和设计师Petter Nilsson决定去探索,建立一个工具来沟通设计和开发的流程。具体而言,我们想构建一个工具,将我们在sketch上的设计导出为可交互的React应用。就像Airbnb React Sketch.app,但是是反向的。

如果要在一周内完成,这看起来十分困难,所以我们决定为工具添加一些限制:

-sketch中的设计只能有预设的symbols组成,这些symbols映射到我们已经实现的React UI组件。

-导出的代码只能作为交互原型来展示应用的布局,不能在页面跳转,类似于framer。代码可以作为起点,但不会包含实际的数据和业务逻辑。

-可以导出一个响应式布局,但是需要通过命名来定义sketch的行列结构。

这是我们一周后的成果:

https://giant.gfycat.com/EllipticalSpiffyEasternnewt.webm

在有限的时间里,我们实现了我们想要完成的目标。在这篇文章里,我会分享我们如何构建这个工具。

读取sketch文件

sketch的文件格式,就是压缩的json文件(包含设计中的位图)。为了能够方便的访问这些信息,并且能自动加载,我创建了一个自定义的webpack加载器。解压单个sketch文件并且读取单个json对象:

{

document: {...},

meta: {...},

user: {...},

pages: {...},

}

最有趣的部分是pages对象,它包含了sketch文档,就像图层树一样。一个图层可以是一个组,文字,组件,symbol,形状等等,每个层也可能会有子层。

加载器还使用了Webpack和emitFile API,使它们在服务器上的路径可以是位图。大多数文本数据是二进制,所以字段压缩后在客户端可读。

Components和Props

现在我们访问了sketch数据,我们可以将它映射到React组件上。因为sketch中的数据结构为一层树,所以它可以清晰的转换为我们想要创建的组件。通过递归遍历,把遇到的每层创建相应的组件。

sketch中的一层大多数是组,或者是定义的symbols。我们对图像和文本也有处理,这些组都同一个命名约定,我们将它们解析为带有间隔的组件。

为了能设置更多的UI组件,我们稍微滥用了sketch的symbol功能,在下面的示例中,我们在sketch文档里可视化了标签字段,这些会映射到react组件中。

这些在下拉中都有预设的选项。我们在sketch创建了许多不同类型和状态,所以可以在主按钮,次按钮和禁用按钮之间选择。

布局

https://giant.gfycat.com/GenerousJadedAsianwaterbuffalo.webm

虽然从sketch文档中读取坐标很容易,而且可以绝对定位所有的东西,但我们认为这个工具的一个重要特性就是,能导出响应式的应用。

我们经常遇到这样的问题,我们有漂亮的标准化设计,但是一旦你的窗口调整了,你可能会出现一些没有预料到的问题,这是因为在实现之前,没有工具可以检查到这点。

为了解决它,我们按照12列栅格布局来构建设计。这个是还原时给开发用的,但是设计中考虑更有意义。

https://giant.gfycat.com/TheseOldfashionedIrishterrier.webm

所有的设计师需要创建一个名为行和列的组,将元素放置其中。行列可以互相嵌套。当代码循环通过这个结构时,它可以自动检测预期大小,通过检测窗口大小,来设置断点。

优势

响应式允许你申明式表达你的UI,这打开了构建工具的可行性。一旦你实现了应用的基本构建,可视化工具处理布局会比编辑器更有意义。在繁复的开发工作中,专注于业务逻辑,让更多的可视化工具来处理重复性的工作。

将设计和开发过程联系更紧密带来的好处:

设计的反馈循环被缩短了,因为他们不需要等待实现,或者通过其他工具构建原型测试。

花在设计上的时间可以帮助构建定义好的组件和布局,节省零碎的开发时间。

通过对设计中的UI元素和React组件一对一的映射,设计师可以更好的理解代码作用,以及需要哪些新的组件。

提供工具来定义一个应用如何响应,这样可以让设计师完成适应的网格,而不是把负担留给开发人员。

继续前行

虽然我们这周构建的工具,允许我们快速预览我们的设计,但是我们从来没有实际的输出,构建工具是一个有趣的学习体验,但最终不是一个有意义的结果。

因为这个工具和我们的UI组件耦合度太高了,我们不能和其他人分享它-但是也有很多有趣的工具出现在这里:

React Studio

It goes far beyond checkboxes. Making a list? Draw one item, and React Studio can repeat it and fill with real data…reactstudio.com

Compositor

Tools for designers, developers, and creativescompositor.io

Meet Alva

Alva is a radically new open source design tool built for cross-functional product teams. You can design with the same…meetalva.io

这些工具的发展也很有趣,我们很期待它们将如何融入我们的工作中。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,431评论 25 707
  • 这篇文章算是一篇工具收集,囊括了许多正在或已经流行的设计工具,不论是版式,字体,还是版本控制,动画,开发协作和响应...
    ShusQ阅读 525评论 0 3
  • 没有脾气的微笑倾听者 总是静静地 你不曾懂她的神经质 就如同你不懂她的寂静 所以,她的千娇百媚不会属于你
    红色小摆裙阅读 359评论 0 0
  • 天寒的伸不出手,电话那头他说:你们到家了吗?我十分钟之后到家!要不我去接你们!我说:不用!我还得带车送学生回家!你...
    海深处阅读 403评论 2 2
  • 现在的年青人是90后的天下,有好的一面,也有不好的一面,不好的一面正如萧秋水老师说的一样,这个社会是在纵容他们,而...
    周朝阳阅读 402评论 0 1