我的失败与成功:一个页面组件的开发过程

过程描述

前天交给我一个开发任务:一个页面,一天时间,我信誓旦旦说可以做完。
昨天上午来的有些晚,来了就开始开发。

这个页面的图片是这样的:

布局是这样;显示逻辑是刚进来的时候有一个浇水动画,同时选中树的状态的环会有一个动画效果;交互逻辑只有点击分享按钮可以分享到家长端app一个h5页面;业务逻辑是右侧和左侧的文案根据奖章数量变化。

理清了思路(其实理清思路的过程还挺长,需求文档写的需求点重复而且需求点之间没有结构化和顺序可言),开始动手。

设计稿是这样:

我是第一次接触到这样的设计稿,一个静态的图片,标记好的尺寸,配套的图片资源,缺了什么找ui要。其实这样很容易有一些没有标出的东西需要自己去量,下载ps的过程挺漫长,最终也没装好,放弃了。

之前页面组件存在的问题是没有做任何组件划分,看组件代码只能看到一坨html,并不能一眼看清结构,比如这样:

这种代码看着特别的累,想理清那一块代码是界面上的哪一块要花很多的时间。所以,我先划分了组件,是这样划分的。

文件有这些:

分享按钮在components这个目录下,因为它被多个页面用到了。

首先是左边的ResultTreeInfo组件,他的特点是 树的图片,树的状态的图片以及下面的文案,都是根据树的状态来联动变化的。所以我是这么封装。

treeInfo封装treeImg、 statusImgs、 texts这三种资源的所有情况,每一个都是数组存放。然后模板里循环渲染所有的资源。并且根据treeStatus和msgIndex显示对应的资源,treeStatus是树的状态,这个需要请求后端接口,根据奖章数、冰冻次数等来确定(还没写完)。msgIndex设计为computed是因为他是根据一些其他状态的数据来联动修改(从服务端接口获取的数据)。isShowTreeImg和isShowTreeMsg是选中对应资源的逻辑。

右边的ResultList组件,是做布局以及提供ResultListItem渲染所需要的参数。

渲染的treeInfo、medalInfo、iceInfo放在state里,因为是相同的结构,所以提供了resultList这个computed属性来简化渲染逻辑。

然后是ResultListItem组件,组件的封装和类或者其他东西的封装一样,都是分离变与不变,不变的部分封装到内部,变的部分通过props、events、slot等暴露出去。

这里不变的是布局,变的是icon、iconText、numText以及numText里面用到的数字,所以我暴露了这四个参数。

其中icon提供了枚举值,文本提供了占位符:

具体的渲染的时候,用的是根据参数处理之后的数据:

numInfo设计成这样是因为,文本中数字的位置不确定,所以通过占位符 + 替换的数字 的方式来做的。

现状

昨天做了一天,没做完,没做完的地方如下:

1,组件:分享组件的封装。

  1. 显示逻辑:进入页面的浇水动画效果
  2. 交互逻辑:分享组件的分享功能
  3. 业务逻辑: ResultTreeInfo的treeStatus和msgIndex的计算,ResultList的 treeInfo、medalInfo、iceInfo的计算。这些都是根据奖章数、冰冻次数等来计算的。
  4. 课程结束时候的菜单栏和左侧快捷入口的路由替换和悬浮效果。

总结与反思

估了一天时间,结果没做完,差的还不少,对自己的很是不满意。分析了一下原因,至少这有几点吧。

  • 看需求文档,开始没有理清思路,花了挺长时间
  • 之前做react开发基于antd组件库,更多的是调整各种参数,js写得多,布局写的少,生疏了,所以布局写的挺费劲。
  • 过程中的ps下载花了一些时间
  • 调试的有些费劲,所以我把store和router挂到了window下
  • 因为没有理清需求,和对自己的过于自信,导致了估时间果断,2天也许更适合现在的自己。熟悉之后会快一些。

优化和建议

  • 流程中没有 tech design(技术设计)的阶段,很多东西都是开发时候现想,这样挺容易出问题的。我们之前公司是有一个技术设计阶段,写技术设计的文档,里面带了估时,这样别人review方案可以进行改进,同时估时也更接近真实。

  • 没有一些通用的组件的封装,比如Icon、ShareBtn这种,重复了很多次的,每次都要重新开发。

  • 需求文档的需求点如果能按照顺序来会更好一些。

  • 我自己要加强css的训练,以及tech design这个阶段的重视吧。效率还是不够高。

思考所得

  • 页面组件 就是布局 + 组件, 布局的部分交给父组件, 组件负责具体每一块的布局,然后组件内部也是一样的 布局 + 组件,直到 布局 + 元素,这是递归的终止,这是开发一颗组件树的过程。布局部分如果用在了多个地方,应该单独抽取一个布局组件。

  • 什么时候要封装组件,什么时候不封装组件呢。首先一个组件的模板或jsx应该是结构清晰的,这是基础,然后某一部分用到的次数如果大于1,就有封装的必要。比如布局,如果只用到了一次,那么就写在组件里,如果用到了多次,那么就应该单独抽取出来做一个布局组件。从一到多,就应该封装,就像类是对象的集合一样,组件类也是具体的页面区块的集合,一到多的变化就是写死到封装的变化。而列表组件天生就带了多的属性,所以listItem几乎是必封装的组件,不过还要根据listItem的复杂度来决定。 一和多是一个有趣的关系。

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

推荐阅读更多精彩内容