响应式是什么
响应就是交互,就是你对它做的事情他会有回应。观察者模式以及各种观察者模式的实现,比如浏览器的事件机制、vue的事件通信、数据库的触发器等都是响应式的。
一般的程序的交互就是输入参数,返回结果或者异步的回调。但是面向用户的程序,入口有很多,我们会监听用户的行为、各种交互事件,然后对对应的事件作出响应、处理。前端进入mvvm阶段以后,很多dom操作都被隐藏和封装起来了,我们需要关心的只是数据的变化,dom事件的响应式机制自然也就深入到了数据的层面,有了各种数据的响应式机制,比如vue的响应式、比如rxjs等数据流的响应式。
响应式的优点
归根到底,其实响应式还是基于观察者模式来做的,思想一样,但是应用的场景和封装的程度都不同。很多时候,响应式确实是很方便的,比如状态复杂的时候,如果是命令式的,那么每次状态变化需要手动去修改一系列的联动更新,而响应式的也就是建立起了联动的机制,就像有了火灾消防员就会赶往现场、各种应急消防措施也会启动一样,是自动去联动而不需要认为去命令式的操作的。
响应式的缺点
当然,响应式有好处也有坏处,好处就是建立了联动的机制,使得每种变化之后的操作不需要手动去做,观察者或者说联动者的数量和行为也可以动态的透明的去维护。但是,这种联动关系一旦没管理好就会造成这种难以发现的问题,比如事件监听,如果分散在整个项目中,那么会使得某一种状态变化了,你都不知道会有怎样的联动变化,就像蝴蝶扇一下翅膀,外里外的海啸是怎么引起的你都不会知道。响应式需要合理的受控制的去运用,比如把所有的事件监听器集中到一块,比如联动有一定的方向性和规律性,而不是随意的各种方向的事件通信。
总结
响应式确实对状态变动频繁,交互逻辑复杂、数据模型关系复杂的情况有很大的简化,只要建立起联动的关系,那么变动会自动的去联动调用,就像你训练一条小狗摇铃铛吃饭一样,以后只要摇铃铛就好了。响应式对于现在越来越复杂的前端应用来说,确实是必不可少的。但是要合理的有规范的去应用。手持利剑,而不被它所伤。