React组件没有修改的概念,当一个组件的内容更新时,是 render 函数直接创建一个新的组件替换旧的组件,
然后新的组件树与旧的组件树做比对,找出两颗树中存在差异的那一部分,最后只更新dom的那一部分就可以了
在Chrome浏览器中,更新的那一部分会有紫色闪烁,其他没有变化的部分不会闪烁:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="react.development.js"></script>
<script src="react-dom.development.js"></script>
</head>
<body>
<div id="root" class="a">
</div>
<button onclick="f()">交换位置</button>
<script>
const baidu = React.createElement('li', {key: 'baidu'}, React.createElement('a', { href: "https://www.baidu.com/"}, ['百度一下']))
const google = React.createElement('li', {key: 'google'}, React.createElement('a', { href: "https://www.google.com/"}, ['谷歌']))
let links = [baidu, google]
let title = React.createElement('h2', {}, '演示最小更新:')
let content = React.createElement('div', {}, title, ...links)
ReactDOM.render(content, document.getElementById('root'))
function f() {
[links[0], links[1]] = [links[1], links[0]]
let content = React.createElement('div', {}, title, ...links)
ReactDOM.render(content, document.getElementById('root'))
}
</script>
</body>
</html>
网友评论