调用setState函数之后,React会将传入的参数对象与组件当前的状态合并,然后触发所谓的调和过程(在每次数据更新之后,react会重新调用render渲染出新的组件结构,新的结构应用到dom中的过程,就称为调和)。经过调和过程,react会以相对高效的方式根据新的状态构建react元素树,并且着手重新渲染整个UI界面,在react得到元素树之后,react会自动计算出新的树与老树的节点差异,然后根据差异对界面进行最小化重渲染。在差异计算算法中,react能够想对精确地知道哪些位置发生了改变以及如何改变,这就保证了按需更新,而不是全局重新渲染。
纪录在工作中遇到的一些问题:
$apply
决定什么事件进入angular content。
当你点击带有ng-click
的元素时,事件就会被封装到一个$apply
调用。如果你有一个ng-model="foo"
的输入框,然后敲一个f,事件就会被调用$apply("foo='f';")
。
angular什么时候不会自动$apply?
用jquery写的代码,应用双向绑定的时候数据并没有自动更新。
原因:jquery没有调用$apply,事件没有进入angular content,而angular content没有变化,$digest循环永远不会执行。