封面图

第168期:后端骂前端:你他喵的下班太早了_封装

今天听到了一件非常值得思考的事情:后端把前端给骂了,你他喵的下班太早了。

午休的时候差不多一点半左右,楼道里突然两个人吵了起来,一个后端在骂一个前端,声音还特别大:你那边的活儿是不多吗,我们每天都加班,你为什么到六点半就走了?以后得端正态度!咱们现在在联调阶段~巴拉巴拉一大堆,说的声音又大又难听~

这是发生在我身边的一件事,就在昨天。我也真是服了,六点下班,人家等到六点半才走,这就是态度不端正?这世界上的事儿真奇怪。

假如前端的工作做完了,界面开发完了,业务逻辑写完了,联调阶段下班还不能回家了?这是什么逻辑?

以前一直以为这种狗血剧情不过是大家平时没事儿开个玩笑罢了,看来还是我太天真了,毕竟艺术本身就来源于生活

对加班的看法

加班这个事儿怎么说呢?不少公司都有加班文化,但是留下来的人真的是在加班吗?这倒未必,假如六点下班,出去吃个饭,摸个鱼,这不得花个一两个小时,真正加班的时间屈指可数吧,可能我说的过于直白了,但是呢,事情原本就是这个道理。

一个人总是加班,假设他不用每天参加一些乱七八糟的会议,从一定程度上说明了这个人的工作效率不高,或者虽然工作效率高,但是处理问题并不细致,需要额外的时间去处理因为考虑不周而出现的一些问题。

所以,要想不加班,就需要我们提高我们的工作效率。做好工作计划,尽量做到今日事今日毕。

关于吵架

吵架其实是一个人能力不足的体现。事情超出自己的可控范围,不能够冷静的分析问题出现的原因,不能用合理的方式处理与同事之间的关系,靠大声叫嚷去指责别人下班早,恰恰是这个人能力不足的一种体现。

联调阶段其实很简单,假设前端界面开发无误,业务逻辑无误,同时如果后端能保证数据正常,后端业务逻辑正常,并且前后端在开发阶段沟通过相关的需求,以及接口间的规范、字段等信息,基本上不会有什么太大的问题。

所以出现这种吵架的现象,其实暴露了两个问题:一是这个人的能力不足;二是公司内部项目开发流程中人员沟通不足。

所以,有些人觉的,哎呀我天天加班,你他吗每天走那么早,靠!

不完善公司内部流程,不加强团队内部沟通协调,各种问题迟早都会出现,到时候我们就会像是一个救火队长一样,不断的去扑灭来自各个方面的火灾,看起来忙的焦头烂额,实际上没什么太大的意义。

vue2中的slot

这两天在开发一个组件的过程中遇到了一个跟slot相关的问题。

  1. 先用element-ui封装了一个Table组件,用的是jsx语法,内部用$scopedSlots做了slot的处理,以便于能够自定义表格的每一个数据列。
  2. 又基于这个封装的Table组件封装了一个basicpage组件,同样需要在basicpage组件中能够自定义数据列。

这是个基本需求。

按照以往的经验,我们只需要在写basicpage组件的时候,把slot插槽做一个动态化的处理就行了,如:

// 动态插槽
<template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
  <slot :name="item" v-bind="data || {}" />
</template>

便利$slots中所有的插槽,动态的生成指定名称的插槽,v-bind="data || {}" 用来绑定插槽上的数据,以便在父组件中可以直接获取到相应的数据。

但是在实际的应用中,虽然父组件basicpage中,单独写slot="xxx",插槽可以生效,但是一旦写成#action={row}时,插槽就不起作用。

初步推测原因在于封装Table组件用的jsx语法中$scopedSlots调用时没有拿到相关的数据,

因为Table组件封装的代码并不是我写的,后来发现,Table组件中的slot是基于column中的prop字段实现的,所以Table组件中的插槽名称必须跟column中的prop字段保持一致。

另外,如果我们直接使用上面所描述的动态插槽,由于作用域的不同,插槽并不会向下传递到封装的Table组件中,所以会导致插槽不展示,或者尽管能够展示,但是父组件basicpage中无法获取到对应数据行的数据,从而无法达到自定义的效果。

处理方案是,在Table组件中遍历columns根据columns的prop属性动态的生成插槽,这样就能保证$scopedSlots中必然能够获取到相应的渲染函数。

但是在vue2使用jsx其实无形中增加了开发成本,原本很简单的问题有点复杂化了。