我在知乎讲react是全量更新脏检查,很【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。多人听不懂,说我在乱说,我也懒得理会。我【本文首发于唐霜的博客】【原创不易,请尊重版权】有一个例子,这个例子里面,我们可以看到r【作者:唐霜】著作权归作者所有,禁止商业用途转载。eact是全量更新,而vue可以做到定点【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。更新(当然,vue是不是实现了另说)。我本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。们来看下结构:
【原创内容,转载请注明出处】转载请注明出处:www.tangshua【作者:唐霜】【版权所有】唐霜 www.tangshuang.netng.net未经授权,禁止复制转载。<a>
<b>
<c>
<d>
<e>
在这个结构里,我希望以直观的形式,去监督未经授权,禁止复制转载。【未经授权禁止转载】某个值变化,来实现<d>的更著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】新,注意,这里<d>是一个n【作者:唐霜】【转载请注明来源】ode。在react里面,我们的写法可能【未经授权禁止转载】【作者:唐霜】是这样:
本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】<SomeComponent attr={this.props.tableTips} />
如果想要更新SomeComponent的著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。渲染结果,要么SomeComponent【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。内部做了什么处理,让其自身可以根据某些条本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net件重新渲染,要么必需是当前这个组件重新渲【版权所有,侵权必究】原创内容,盗版必究。染,让SomeComponent被动重新【版权所有,侵权必究】【原创不易,请尊重版权】渲染。但是为了重新渲染<d>原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】而把a, b, c, e都重新渲染一遍,【本文受版权保护】著作权归作者所有,禁止商业用途转载。代价太大。有没有什么办法,在不重新渲染当【本文受版权保护】【版权所有,侵权必究】前组件的情况下,重新渲染<d>【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】;这个片段?
著作权归作者所有,禁止商业用途转载。【作者:唐霜】转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。ng.net一种方法是把d再封装一层,作为一个高阶组【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】件,把需要监听的内容传入该封装好的组件,【作者:唐霜】原创内容,盗版必究。由组件来监听和重新渲染,这样就可以做到局【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net部重新渲染,而不需要整个重新渲染。但是,【本文受版权保护】【本文受版权保护】这种方法也很笨,因为不可能存在一种万能的【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net高阶组件来达到这个目的,所以到处去写这样原创内容,盗版必究。【原创内容,转载请注明出处】的组件也不好。另外,高阶组件的使用,割裂本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。了阅读组件结构的顺序,让我们在后期的维护【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net中,不得不跳来跳去看代码。
【转载请注明来源】著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshua【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。ng.net【原创内容,转载请注明出处】而vue就可以做到基于模板来优化这一需求本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】。例如:
【原创不易,请尊重版权】【转载请注明来源】<some-component attr="tableTips" />
就可以在模板编译时把tableTips作本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】为可动态读取的片段,这样,每次在渲染so著作权归作者所有,禁止商业用途转载。【转载请注明来源】me-component时,读取到的at本文作者:唐霜,转载请注明出处。【作者:唐霜】tr都可能是新的,从而带来重新渲染。
【本文受版权保护】【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】通过这个例子,我们就可以发现,虽然jsx【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。具有非常强的表达力,但它始终基于原生语法著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。,而作为模板语法,当然具有更强的能力。
原创内容,盗版必究。【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。

首先React肯定能局部渲染,不然官方文档就是笑话(https://reactjs.org/docs/rendering-elements.html#react-only-updates-whats-necessary)。
Vue、React的渲染都是要通过vnode diff做更新,Vue也没细粒到标签级别的vnode,只能说Vue的tempalte编译期间做个太多的aot优化,Jsx因为要使用js/ts的全部能力,注定做不了很好的优化。
你说的那个局部渲染叫commit,不是一回事,麻烦看懂再来讨论
如果你说的是前面的render过程,你说的对,默认情况下调用setState都会导致组件及其子孙的render方法的调用。
这就是React跟Vue的不同之处。Vue基于订阅发布模型的数据响应可以在数据变化时准确知道应该通知谁要做更新;React推崇函数式,没有依赖收集过程,调用setState后无法知道依赖的数据是否更新,默认只能进行render,也因为粗暴的渲染机制,所以也才有了shouldComponentUpdate这样的api。
以上是否就是你想说的?
至于你说的脏检查,应该说的是渲染组件及其子孙吧,毕竟对应state,React没做任何检查。