我在面试的时候更喜欢问一些组件封装、代码复用之类的东西,这会使得项目更利于维护,也会在后面的开发中逐步收益,向越来越好,越来越快的方向前行。
一些开发者是真得能够忍受繁琐,前人挖坑后人埋嘛,比如一个对话场景,既能够发文字也能发音频,那么 Audio 组件实现单一音源的播放没什么争议,那么要控制用户播放 A 语音的同时,点击 B 语音,B 语音播放,A 语音停止该怎么实现呢?
坏的方案,Autio 组件在每次触发播放的时候通过$emit 告诉使用组件,把控制播放器的实例传过去,这样就可以关闭"旧"的,播放"新"组件,那么问题来了,类似需求都会有重复的逻辑要被抒写。
其实可以将关闭"旧"的,播放"新"的代码封在 SingePlay 组件里,与 Autio 组件采用 provide 和 inject 的方式通信,这样就提升了内聚性。
provide 和 inject 适合组件之间存在紧密联系的场景,可以忽视层级。
比如一个页面内做代码分割,完成注册用户分三步,每一步都涉及表单验证,而且上一步和下一步之间有数据交互,这个时候还老老实实的使用 props、emit 的方式传给父组件,再传给 Step2 组件,在来个上一步的话,况且组件层级加深,代码就要调整...
当然 provide 和 inject 也不是万能的,只有结合实际用对了场景才能起到好效果,如果把"整体"比作一个人的话,provide 和 inject 相当于优化内部通讯方式,以前需要层层审批,但使用和提供者都是好器官,就直接开绿色通道了,mixins 相当于给人赋予某种能力,props 和$emit 相当于人与人之间的通信。
那么怎样去划分"整体"就是体现抽象能力的时候了。
网友评论