要求:有清晰思路,良好的信息流组件设计模式,可扩展性强并给出核心功能的实现方式
双向数据绑定
双向数据绑定意味着 UI 动态地绑定到模型数据,这样当 UI 改变时,模型数据就随之变化,反之亦然。
单向数据流
单向数据流意味着 model 是唯一来源。UI 触发消息的变化,将用户行为标记为 model。只有 model 具有访问更改应用程序状态的权限。其效果是数据总是朝一个方向流动,这使得理解起来更容易。
二者有什么优缺点
单向数据流是确定性的,数据流动方向可以跟踪,流动单一,追查问题的时候可以跟快捷。缺点就是写起来不太方便。要使 UI 发生变更就必须创建各种 action 来维护对应的 state 双向绑定,优点是使用方便,值和 UI 双绑定,但是由于各种数据相互依赖相互绑定,导致数据问题的源头难以被跟踪到,子组件修改父组件,兄弟组件互相修改有有违设计原则
可以介绍一下模板引擎的原理,比如实现类似 html 这种模板将其中变量替换为对应值的方式。
要求:能够从每个框架的生态系统,甚至结合之前的项目及不同的业务特点,给出框架的优劣
父子之间层级过多时,当父子组件之间层级不多的时候,父组件可以一层层的向子组件传递数据或者子组件一层层向父组件发送消息,代码上没有太难维护的地方。可是,一旦父子组件之间层级变多后,传递一个数据或者发送一个消息就变得麻烦。这块如果了解开源的 Element 组件库,就会知道其实现方式:构造一个函数自动向上/向下查询父亲节点,以[组件名, 消息名, 参数]三元组进行消息传递,降低长链传播成本;
具体实现参考:https://github.com/ElemeFE/element/blob/dev/src/mixins/emitter.js
对虚拟 dom 和 diff 算法中的一些细节理解
https://github.com/livoras/blog/issues/13
要求:写出 diff 算法的核心部分