最近看react文档发现一个问题,因为是英文一直搞不明白确切的意思,求大神解惑!
- 第一种情况:
setState会触发组件重新渲染,但是如果2者相同,在不使用pureRender的情况下会发现componentDidUpdate被执行,说明组件render函数有执行过。但是通过chrome审查元素会发现,组件div根本没有重新生成,如果渲染会有一个红色跳动。
2.第二种情况:
如果setState改变了组件的className,style,children等属性。render执行,组件div在审查元素查看并不跳动而是,class 或者内容跳动。说明divDOM并没有重新生成,而是渲染内部部分内容。
3.第三种情况:
改变包裹组件的dom节点类型,比如由span改为div,render后,会生成新的div。
也就是说每次组件render后形成一个虚拟dom,然后拿这个dom和已经mount的dom去比较。然后再根据上面的三种情况去决定是否重新生成,还是渲染部分内容。
我发现的问题是:比如我有一个<ul>{list.map(item=><li>{item.content}</li>)}</ul>
,在list中添加新的item时,只有新生成的li在chrome审查元素中跳动,也就是说ul组件更新,但是ul实际的DOM节点还是原来的,但是如果我delete一个item时,ul会跳动,也就是ul实际dom节点重新生成了。如何避免减少的时候不重新渲染这个dom呢?不知道我理解有没有错?求大神解惑啊。